問題タブ [scientific-computing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scientific-computing - OpenCLからどのような仕事のメリットがありますか
初めに:
- 私はOpenCLが魔法のようにすべてを速くするわけではないことをよく知っています
- OpenCLには制限があることをよく知っています
さて、私の質問ですが、私はプログラミングを使用してさまざまな科学計算を行うことに慣れています。私が扱っていることのいくつかは、計算の複雑さと数に関してかなり激しいものです。だから私は疑問に思っていました、多分私はOpenCLを使って物事をスピードアップすることができます。
ですから、皆さんからお聞きしたいのは、次の[リンクのボーナス]のいくつかに対する回答です。
*OpenCLにはどのような計算/アルゴリズム/一般的な問題が適していますか
*特定のコードがOpenCLへの移行によって利益を得るかどうかを判断するための一般的なガイドラインは何ですか?
よろしく
math - LISP でのベクトル計算
ベクトルの大きさ、ベクトルのノルム、距離 (2 点間)、内積、外積など、Lisp でベクトル計算を実行するにはどうすればよいですか?
ありがとう。
python - 入力がギガ/テラバイトサイズの場合、何が変わりますか?
最小のファイルが48000フィールド×1600行(22番染色体の数人のハプロタイプ)であるデータセットが表示されたとき、私は今日、実際の科学コンピューティングに最初の一歩を踏み出しました。そして、これは小さいと考えられています。
私はPythonを書いているので、ここ数時間HDF5、Numpy、PyTableについて読んでいますが、それでも、テラバイトサイズのデータセットがプログラマーとして実際に何を意味するのかを理解しているわけではないようです。
たとえば、データセットが大きくなると、マシンのRAMが不十分なためではなく、アーキテクチャのアドレススペースが不十分なために、すべてをメモリに読み込むことができなくなるとの指摘がありました。それは私の心を吹き飛ばしました。
これほど大きな入力では機能しない、教室で私が信頼している他の仮定は何ですか?何か違うことをしたり考えたりするために、どのようなことをする必要がありますか?(これはPython固有である必要はありません。)
python - 仕様値による科学データの依存関係グラフを管理するための Python ソリューション
私は一般的な科学データ管理の問題を抱えていますが、既存の解決策やその説明さえも見つけることができず、長い間頭を悩ませてきました。私は大規模な書き直し(python)に着手しようとしていますが、既存のソリューションに最後にもう一度キャストすると思ったので、自分自身を破棄して生物学に戻るか、少なくとも適切な言語を学んでグーグルを改善することができます.
問題: 通常、1 つまたは複数の他のデータ属性の変換として構築される、高価な (計算に数時間から数日かかる) 大きな (GB の) データ属性があります。このデータがどのように構築されたかを正確に追跡する必要があるため、問題に適合する場合 (正しい仕様値で構築された場合) に別の変換の入力として再利用したり、必要に応じて新しいデータを構築したりできます。それは問題ではありませんが、私は通常、「付加価値のある」やや異種の分子生物学情報から始めます。たとえば、他の研究者による他のプロセスによって注釈が付けられた遺伝子とタンパク質を含むゲノムです。これらのデータを組み合わせて比較し、独自の推論を行う必要があります。多くの場合、多くの中間ステップが必要であり、これらは費用がかかる可能性があります。さらに、最終結果は、追加の変換の入力になる可能性があります。これらの変換はすべて複数の方法で行うことができます。たとえば、異なる初期データで制限する (たとえば、異なる生物を使用する)、同じ推論で異なるパラメーター値を使用する、または異なる推論モデルを使用するなどです。分析は頻繁に変更され、他のものに基づいて構築されます。計画外の方法で。自分が持っているデータ (それを完全に定義するパラメータまたは仕様) を知る必要があるため、必要に応じてデータを再利用したり、一般的な科学的整合性を保つことができます。
一般的な私の取り組み: 記述の問題を念頭に置いて Python クラスを設計しています。クラス オブジェクトによって作成されたすべてのデータ属性は、1 つのパラメータ値のセットによって記述されます。これらの定義パラメータまたは仕様を「def_specs」と呼び、値を持つこれらの def_specs をデータ属性の「形状」と呼びます。プロセスの全体的なグローバル パラメータ状態は非常に大きくなる可能性があります (たとえば、100 個のパラメータ) が、いずれかのクラスによって提供されるデータ属性は、少なくとも直接的には少数のこれらの属性のみを必要とします。目標は、形状がグローバル パラメータ状態のサブセットであるかどうかをテストすることにより、以前に構築されたデータ属性が適切かどうかを確認することです。
クラス内では、コードを調べることで形状を定義する必要な def_specs を簡単に見つけることができます。モジュールが別のモジュールからのデータ属性を必要とする場合、摩擦が発生します。これらのデータ属性には独自の形状があり、おそらく呼び出し元のオブジェクトによって引数として渡されますが、グローバル パラメーターの状態からフィルター処理されることがよくあります。呼び出しクラスは、そのデータ属性の完全な記述を維持するために、その依存関係の形で拡張する必要があります。理論的には、これは依存関係グラフを調べることで手動で行うことができますが、このグラフは深くなる可能性があり、多くのモジュールがあり、常に変更および追加しています...手動で行うには怠惰で不注意です.
そのため、プログラムは、他のクラス属性への呼び出しを追跡し、管理された呼び出しスタックを介してその形状を呼び出し元にプッシュすることにより、データ属性の完全な形状を動的に検出し__get__
ます。書き直していくと、ビルダー クラスへの属性アクセスを厳密に制御して、任意の情報がデータ属性に影響を与えないようにする必要があることがわかりました。幸いなことに、Python は記述子を使用してこれを容易にしています。
データ属性の形状を db に保存して、適切なデータ (つまり、その形状が現在のパラメーター状態のサブセット) が既に存在するかどうかを照会できるようにします。私の書き直しでは、偉大な SQLAlchemy を介して mysql からオブジェクト db (ZODB またはカウチデータベース?) に移行しています。これは、追加の def_spec が発見されたときに各クラスのテーブルを変更する必要があるためです。これは苦痛であり、一部の def_spec はPython のリストまたは辞書。これは SQL に変換するのが面倒です。
可能な限りそうしようとはしていますが、厳密な属性制御が必要なため、このデータ管理をデータ変換コードから切り離すことはできないと思います。def_specs をクラス属性として提供するクラスで既存のクラスをラップし、記述子を介してデータベースを管理することで、既存のクラスを使用できますが、これらのクラスは、追加の依存関係の形状をそれ以上検出できないという点で、最終的なものです。
データ管理をデータ構築から簡単に切り離すことができない場合、すぐに使用できるソリューションはなく、特定のソリューションは数千あるとは考えにくいと思います。該当するパターンがあるのではないでしょうか?問題を調べたり、よりよく説明したりする方法についてのヒントをいただければ幸いです。私には一般的な問題のように思えますが、深く階層化されたデータを管理することは、おそらく Web の一般的な風向きとは相容れないものです。
version-control - 再現性を確保するために科学データ処理ツールにタグを付ける方法
与えられた生データのセットからいくつかの科学的結果を抽出するためのデータ処理ツールを開発しています。データサイエンスでは、結果を再取得して計算を繰り返すことができ、それが結果セットにつながることが非常に重要です。
ツールは進化しているため、ツールのどのリビジョン/ビルドが特定の結果セットを生成したか、およびツールがビルドされた対応するソースを見つける方法を見つける方法が必要です。
このツールはC++とPythonで書かれています。Boost::Pythonを使用してC++パーツを接着します。Linux用のMakeファイルを生成するビルドシステムとしてCMakeを使用します。現在、プロジェクトはSubversionリポジトリに保存されていますが、すでにgitrespを使用している人もいます。hgと私たちは、非常に近い将来、プロジェクト全体をそのうちの1つに移行することを計画しています。
このようなシナリオで、ソースコード、バイナリ、結果セットの間で一意のマッピングを取得するためのベストプラクティスは何ですか?
私たちがすでに議論しているアイデア:
- どういうわけかグローバルリビジョン番号を注入します
- ビルド番号ジェネレーターの使用
- 実行可能ファイル自体の中にソースコード全体を保存する
programming-languages - なぜPL/Iは科学計算で成功しなかったのですか?
PL / Iは非常に古い言語ですが、科学計算用のFortranとしては、あまり宣伝も評価もされていないようです。何故ですか?Webで検索すると、科学計算用のPL/Iコードが多数あることがわかります。とりわけ、IBMがPL/Iで開発した科学計算ライブラリーがあります。
しかし、Windows for PL/I用の無料のコンパイラは見つかりませんでした。PL / Iが科学界を惹きつけなかったのは、この無料のコンパイラの欠如によるものですか?
どうもありがとう...
matlab - Ada: Matlab とのインターフェース
Ada には科学計算用の優れたライブラリがないため、Ada 内で eig (固有値と固有ベクトルの計算用) などの Matlab 数学関数を使用できる人がいるかどうか疑問に思っていました。
simulink と Ada にはいくつかのインターフェースが存在するようです。しかし、私は Simulink のユーザーではありません。おそらく Ada の関数と手順を介して Matlab の数学関数を使用できるようにしたいと考えています。
PS: 以前の Ada ドキュメントでは、NAG や NUMAL に似た優れた数値ライブラリを作成するという多くの話と約束がありました。なぜこれがうまく具現化されず、優れた堅牢な科学計算ライブラリが利用可能になったことがなかったのか不思議に思います。私の意見では、Ada 言語が他のどの科学計算言語よりも劣っていないことは確かです。
どうもありがとう...
database - スケーラブルで高速なテキストファイルに裏打ちされたデータベースエンジン?
タブ区切りのファイルに保存されている大量の科学データを扱ってい.tsv
ます。実行される一般的な操作は、いくつかの大きなファイルの読み取り、特定の列/行のみのフィルター処理、他のデータソースとの結合、計算値の追加、および結果を別の.tsvとして書き込むことです。
プレーンテキストは、その堅牢性、寿命、および自己文書化の特徴のために使用されます。データを別の形式で保存することはできません。データを開いたままにして、処理しやすくする必要があります。大量のデータ(数十TB)があり、コピーをリレーショナルデータベースにロードするのは手頃ではありません(2倍のストレージスペースを購入する必要があります)。
私は主に選択と結合を行っているので、基本的に.tsvベースのバッキングストアを備えたデータベースエンジンが必要であることに気付きました。私のデータはすべてwrite-once-read-manyであるため、トランザクションについては気にしません。主要な変換手順やデータの複製を行わずに、データをインプレースで処理する必要があります。
この方法で照会するデータはたくさんあるので、キャッシュとコンピューターのグリッドを利用して、データを効率的に処理する必要があります。
プレーンなタブ区切りファイルをバックエンドとして使用しながら、データベースのような機能を提供するシステムを知っている人はいますか?事実上すべての科学者が何らかの方法で対処するようになるという、非常に一般的な問題のように私には思えます。
unit-testing - 科学ソフトウェアをテストする方法は?
ソフトウェアテストは、特に科学において非常に重要であると私は確信しています。ただし、過去6年間、定期的なテストが行われている科学ソフトウェアプロジェクトに出くわしたことはありません(ほとんどのプロジェクトはバージョン管理されていませんでした)。
今、私はあなたが科学的コード(数値計算)のためのソフトウェアテストをどのように扱うのか疑問に思っています。
私の見解では、正確な結果がないため、標準の単体テストではポイントを見逃すことがよくあります。そのためassert(a == b)
、「通常の」数値エラーのために使用が少し難しい場合があります。
だから私はこれについてのあなたの考えを読むのを楽しみにしています。