-1

インデックスが遺伝子に対応する密な行列があります。遺伝子識別子は多くの場合整数ですが、連続した整数ではありません。代わりに文字列にすることもできます。

ある種のブースト疎行列を整数キーで使用できると思いますが、それらが連続しているかどうかは問題ではありません。それとも、特に一部の遺伝子が 9 桁の識別子を持っている場合、これはまだ多くのスペースを占めるのでしょうか?

さらに、これはすべてのマトリックスであるため、スパースストレージが適切ではないことを懸念しています(遺伝子が存在する場合、すべてのセルに距離があります)。

行列演算 (行列の乗算など) を実行する必要はほとんどありません。行列 (スライス) からベクトルを引き出す必要があります。

Boost unordered_map (ハッシュ マップ)、あるいは単純に STL マップでキーを設定するのが最適なタイプのマトリックスのようです。

私はこれを間違った方法で見ていますか?本当に自分でロールする必要がありますか? そんな授業、どこかで見た気がした。

ありがとう!

4

3 に答える 3

2

a を使用しstd::mapて、遺伝子識別子を一意の連続して割り当てられた整数にマップできます (新しい遺伝子識別子をマップに追加するたびに、マップから遺伝子を削除しないと仮定して、マップのサイズをその識別子として指定できます)。

一意の整数に基づいて遺伝子の識別子を検索できるようにする場合は、2 番目のマップを使用するかboost::bimap、要素の双方向マッピングを提供する を使用できます。

どのマトリックス コンテナーを使用するかについては、次のことを検討してくださいboost::ublas::matrix。行列の行と列へのベクトルのようなアクセスを提供します。

于 2010-05-21T22:00:42.327 に答える
2

行列演算が必要ない場合は、行列は必要ありません。文字列キーを使用した 2D マップはmap<map<string> >、プレーンな C++ で実行するか、Boost から適宜ハッシュ マップを使用して実行できます。

于 2010-05-21T22:01:53.923 に答える
0

非連続インデックスで管理できるBoost.MultiArrayがあります。

静的サイズの行列を処理する効率的な実装が必要な場合は、Boost.LAもあります。これは現在レビュースケジュールにあります。

そして、LasにはすぐにBoostに提出されるべきNT2もあります。

于 2010-05-22T02:34:19.507 に答える