12

私が必要なものは何?[順不同リスト]

  • 非常に簡単な並列化
  • マップ、フィルターなどのサポート
  • A=B+C のような配列ベースの計算を効率的に実行する機能。matlab 配列のようなものです。
  • SIMD コードの生成。近い将来、これは問題外だと思いますが、ちょっと聞いてみましょう:)
  • マトリックスのサポートは最低限必要です。現在、より高い次元は優先度が低くなります。
  • それへのポインターを取得し、C ポインターから作成する機能。
  • 他のライブラリからのサポート。IE、一般的な C 数学パッケージへのバインド、ディスクまたはイメージへの I/O (配列が 2D の場合)

何が見えますか?

  • haskell-platform の配列パッケージ。それは祝福されたものであり、並行して行うことができます
  • データ.ベクトル。ループ フュージョンはありますが、プラットフォームには含まれていないため、その成熟度は不明です。
  • DPH チームによって提供された repa パッケージですが、現在、安定した ghc ではうまく動作しません。
  • 配列実装のサポート レベルにはさまざまなバリエーションがあります。たとえば、2D ベクトルを画像ファイルにダンプする簡単な方法はないようです。IOW、haskell コミュニティはどうやら配列の実装に落ち着いていないようです。

ですから、選択を手伝ってください。

EDIT A=B+C は、リストの連結ではなく、要素ごとの追加を指します

4

3 に答える 3

8

正解です。コミュニティは、適切な配列の実装を決定していません。Vector API を提唱し、Data.Array を削除することは、Haskell Prime に提出するのに適していると思います。

ベクトルは非常に成熟しています! それは持っています:

  • 非常に簡単な並列化
  • mapfilterなどのサポート
  • A=B+C のように、配列ベースの計算を効率的に実行します (ただし、matlab の方法には慣れていません)。
  • Vector.Storable によるポインタからのベクトルの作成

それはしません:

  • 他のライブラリからの十分なサポートがあります。IE、一般的な C 数学パッケージへのバインド
  • 行列をサポートしますが、ベクトルのベクトルを持つことができます。ベクトルベースの行列演算を構築する場合、おそらくベクトル行列として hackage にアップロードできます。
  • SIMD コードを生成します。

注: バイト文字列を任意のベクトルに変換できるため、画像をバイト文字列として使用している場合は、Vector.Storable を使用して、画像をベクターとして必要な操作を実行できる可能性があります。

于 2011-03-04T16:58:45.800 に答える
3

(コメントはお受けできません)

rpg: hmatrix は受け入れData.Vectorますか? がありData.Packed.Vectorますが、同じですか?

はい。hmatrix の最新バージョンでは、デフォルトData.Vector.Storableで 1D ベクトルが使用されます (以前はオプションでした)。vector への依存関係は、おそらく構成フラグにあるため、Hackage には表示されません。

LAPACK 互換性行列はVectorまたはVector tではありませんが、簡単に変換できます (例: Data.Vector.fromList . toRows)。

于 2011-03-11T17:58:24.497 に答える
2

一般的な C ライブラリへのバインドが必要な場合、最適なオプションはおそらくhmatrixblasです。Blas は BLAS ライブラリへのバインドにすぎませんが、hmatrix はより高度な操作を提供します。さらに多くの機能を提供する hmatrix に基づいて構築された多くのライブラリもあります。何らかのマトリックス作業を行っている場合は、それから始めます。

vector パッケージも良い選択です。安定しており、優れたパフォーマンスを提供します。型は C 配列として表されるため、Data.Vector.Storable型から他の C ライブラリへのインターフェイスは簡単です。最大の欠点は、マトリックスがサポートされていないため、自分で行う必要があることです。

画像フォーマットへのエクスポートに関しては、ほとんどの Haskell 画像ライブラリが ByteStrings を使用しているようです。ByteString に変換するか、必要な処理を行う C ライブラリにバインドすることができます。必要な処理を行う Haskell ライブラリが見つかった場合、hmatrix データを適切な形式に変換するのは簡単です。

于 2011-03-04T16:51:59.360 に答える