私は、すべての行が個々の観測値を表すパーセンテージ値を持つ行列を持っています。これらの値が同じ添字に対応する累積積を計算する必要があります。私はaccumarray
関数を使用しようとしました。これは、行列ベクトルではなく値として列ベクトルを使用する限り、正常に動作します。 私のバリュー・マトリックスの個々の列をループせずに問題を解決する最良の方法は何ですか?ヴァルスのためにMATLAB:値を行列としたaccumarray(第2の入力パラメータ)
subs = [1;1;1;2;2;2;2;2;3;3;4;4;4];
vals1 = [0.1;0.05;0.2;0.02;0.09;0.3;0.01;0.21;0.12;0.06;0.08;0.12;0.05];
% This is working as expected
result1 = accumarray(subs,vals1, [], @(x) prod(1+x) -1)
vals2 = [vals1,vals1];
% This is not working as the second input parameter of accumarray
% apperently must be a vector (rather than a matrix)
result2 = accumarray(subs, vals2, [], @(x) prod(1+x) -1)
簡単な解決策のように見えていませんあなたは
ndgrid
を使用して2次元の添字の新しいセットを生成することができます。それは働いていますが、imhoではaccumarray関数の読みやすさが低下します。その場合、私は単純なfor-loopソリューションを好むと思います。'0'の場合:'result2(:、i)= accumarray(subs、vals2(:、i)、[]、@(x)prod(1 + x) - 1); ' ' end' – Andi
forループソリューションは、列数が多い場合には効率が悪い場合があります。 – rahnema1
ええと、私の場合、列の数は10,000までになる可能性があります。 – Andi