3

私は線形代数の計算を行っており、基本的に2x2、2x1、3x1、1x2のさまざまな次元を処理できる非常に軽量で使いやすい行列クラスを探していました。そのようなクラスは、パフォーマンスのために、テンプレートを使用して実装でき、場合によっては特殊化を使用できると思います。使用可能な簡単な実装を知っている人はいますか?メモリが制限されている組み込み環境でこれを実行するため、「肥大化した」実装は必要ありません。

ありがとう

4

8 に答える 8

6

Blitz++ -- またはBoost の uBLASを試すことができます

于 2009-08-14T22:23:50.670 に答える
5

私は最近、さまざまな C++ マトリックス ライブラリを見てきましたが、Armadilloに一票です。

  • ライブラリはテンプレート化されており、ヘッダーのみです。
  • また、Armadillo はテンプレートを活用して遅延評価フレームワーク (コンパイル時に解決) を実装し、生成されたコードの一時部分を最小限に抑えます (結果として、メモリ使用量が削減され、パフォーマンスが向上します)。
  • ただし、ほとんどの Armadillo コードは、テンプレートに基づく設計アプローチにより、コンパイル中に「蒸発」するため、これらの高度な機能はコンパイラにとって負担になるだけであり、組み込み環境で実行される実装ではありません。
  • それにもかかわらず、主な設計目標の 1 つは使いやすさでした。API は意図的に Matlab の構文に似たスタイルになっています (サイトの比較表を参照してください)。

さらに、Armadillo はスタンドアロンで動作しますが、パフォーマンスを向上させるために利用可能な LAPACK (および BLAS) 実装と一緒に使用することを検討することをお勧めします。適切なオプションは、たとえばOpenBLAS (またはATLAS ) です。Armadillo の FAQを確認してください。いくつかの重要なトピックがカバーされています。

Google で簡単に検索すると、Armadillo が組み込みシステムで既に使用されていることを示すこのプレゼンテーションが掘り出されました。

于 2012-11-12T21:59:56.047 に答える
1

マトリックス計算にはNewmatライブラリを使用します。オープンソースで使いやすいですが、軽量の定義に適合するかどうかはわかりません(Visual Studioが1.8MBの静的ライブラリにコンパイルする50を超えるソースファイルが含まれています)。

于 2009-08-14T23:01:53.760 に答える
1

std::valarray はかなり軽量です。

于 2009-08-14T22:28:12.283 に答える
1

手遅れかもしれませんが、別のオプションは次のとおりです。

https://launchpad.net/lwmatrix

于 2011-12-06T01:00:28.820 に答える
1

CMLマトリックスはかなり優れていますが、組み込み環境には軽量ではない可能性があります。とにかくチェックしてください:http://cmldev.net/?p=418

于 2009-08-14T23:42:07.177 に答える
0

私は十分に単純なライブラリを見つけることができなかったので、自分で書きました: http://koti.welho.com/aarpikar/lib/

一部の行または列をゼロに設定するだけで、さまざまな行列の次元 (2x2、3x3、3x1 など) を処理できるはずだと思います。内部的にはすべての操作が 4x4 行列で行われるため、これは最速のアプローチではありません。理論的には、1 ティックで 4x4 操作を処理できるようなプロセッサが存在する可能性があります。少なくとも、低レベルの行列計算を最適化するよりも、そのようなプロセッサの存在を信じたいと思います。:)

于 2009-08-15T12:02:57.430 に答える
-1

次のように、行列を配列に格納するのはどうですか

2x3 matrix = {2,3,val1,val2,...,val6}

これは非常に単純で、足し算も簡単です。ただし、独自の乗算関数を作成する必要があります。

于 2009-08-20T17:07:56.410 に答える