このようなデータセットがあります:多数のベクトルのためのcombvec関数を持つ "メモリ不足" MATLAB
インデックス|パラメータA |パラメータB
1 | 1 | 3
2 | 1 | 5
3 | 1 | 1
4 | 2 | 12
5 | 2 | 15
6 | 2 | 41
7 | 3 | 22
8 | 3 | 14
9 | 3 | 9
Iは異なるパラメータでパラメータBのすべての可能な組み合わせを計算する必要がA、すなわち(1)3-(2)12-(3)この組み合わせの指標、この場合1-4-9を得る。
- combvec(:私はこの時、パラメータAの変化(この場合は3と6で、私はそれが周期的でない指摘しなければならない)、ループ内combvec関数を使用するインデックスを定義した解決方法combvec(1:3,4:6)、6:9)。
Anが、私は、その後の事がリストされたパラメータBの組み合わせを取得するために使用できる、各列のすべての組み合わせのインデックスを持つ行列を得るには、それゆえ、今、メモリ問題のうち大きすぎます。
ここでの目的は、パラメータBの各シーケンスに対してある結果-X-を計算し、次にその結果を最小にする組み合わせを選択することです。
私はリストを2つに分けることができると考えましたが、問題はXがすべてのAパラメータに依存するためです。両方のグループの最小値が必ずしもグローバルな最小値になるわけではないため、
私が思ったもう1つの代替案は、ループ内の各組み合わせを取得し、直ちにXを計算し、以前の繰り返しよりも小さい場合はXだけを保存することでした。このソリューションは私のストレージの問題を解決するだろうが、私は使用することができないので入れ子になったループなしでこれを行う方法がわからないcombvec。
あなたがこれを解決する方法や、私が言及した問題を回避する私の提案をどうやってくるかについてのアイディアがあれば、私は感謝します。
事前に感謝します。
いくつかの代替案があります(http://stackoverflow.com/questions/21895335/generate-a-matrix-containing-all-combinations-of-elements-taken-from-n-vectors)。生成するコンビネーションの数はいくつですか? – beaker
3e9の可能な組合せは約24GBを意味すると思います。 – jcarvalho
一般に、多くの計算は、あなたのアプローチを再考する必要があるかもしれない大きな警告兆候です。あなたが*本当に**本当に** ***本当に***がそれをしなければならない場合、一つの安価な方法は、あなたの最大ベクトルをとり、 'combvec(1、b、c); combvec(2、b、c); combvec(3、b、c);など。これは一度に処理される組み合わせの数を最大のベクトルのサイズで除算するだけですが、それでも十分でしょう。反復的に組み合わせを生成することはできますが、***遅いです***。 – beaker