対応する乗算:temp
は10万* 3マトリクスあるインデックス外マトリクスの列ベクトルを、次のように私は重い計算を有するマトリックス
L = ones(100000,200000);
for i = 1:10000
temp = f(i,...);
L = L .* temp(:, index);
end
(値はf(i,...)
から計算され、私はここに引数を省略)とは、1 * 200,000整数ベクトル(1〜3)です。
私は自分のアルゴリズムで何度も何度もやらなければなりません。私はMatlabが反復でtemp(:, index)
から100000 * 200000を作成する時間を無駄にすると感じます。しかし、それは必要ではないかもしれません。つまり、対応する列を抽出してから、対応する列のL
に掛けることができます。しかし、私は効率的にそれを行う方法を見つけることができません...
誰もがこれについて助言を与えることができます。ありがとう!
私は小さなおよび仮想的な例を与える:
function test
x = rand(5,3);
t = rand(10,1); % could be very long
point = 3;
index = [1 2 1 3 2 3 1 2;...
2 3 2 1 2 3 1 1;...
1 1 1 2 2 3 1 1;...
3 3 2 3 2 2 2 1;...
2 3 2 1 2 1 3 1]; % could be very long
L = ones(10,8);
for i = 1:5
temp = myfun(x(i,:),t,point);
L = L .* temp(:, index(i,:));
end
function prob = myfun(x,t,point)
prob = ones(size(t,1),point);
for k = 2:point
prob(:,k) = exp(((k-1).*x(1).*(t) + x(k)));
end
de = sum(prob,2);
for k = 1:point
prob(:,k) = prob(:,k)./de;
end
end
end
質問を明確にしてください。作業コードを使って簡単な例を作ると、nxmの行列を10x20程度に変更できます。そうすれば、私はあなたを助けることができるでしょう。 – JCKaz
'temp'変数を避けたい場合は、' f(i、...) 'の行全体を指定する必要があります。私は手で計算された数字で小さな説明的な例を追加することをお勧めします。 – Dan
データにゼロが多い場合は、[疎行列](http://ch.mathworks.com/help/matlab/ref/sparse.html)を使用することを検討してください。 –