2017-05-11 5 views
1

私はベクトルを他のベクトルで定義されたインデックスに合計するforループをベクトル化しようとしています。合計するベクトルは多数あります。これはforループでは簡単に行えますが、明らかにベクトル化された方法で私には明らかではありません。Matlabの任意の列に行を合計する

ランダムな例は次のようになります

T =ランド(10、5)。

c = randi([1,5]、1,10);

基本的には、現在の行tと同じインデックスcで指定された対応する列まで、各行を合計する必要があります。戻り値は、それぞれの列c(i)に対する行合計のベクトルになります。私は考えることができるが、最終結果を達成することはできない総和関数の操作を数多く探索しました。

アドバイスはありますか?そうする

答えて

1

一つの方法は、あなたが、各行の合計に含める値のマスクを作成するためにbsxfunを使用している:

result = sum(t .* bsxfun(@le, 1:size(t,2), c(:)), 2); 
のMatlab R2016bで

以降あなたはimplicit expansion代わりのbsxfun使用することができます。

result = sum(t .* (1:size(t,2) <= c(:)), 2) 
関連する問題