左辺の添字インデックスになる配列(左辺の配列より要素数が多い)に複数の同値がある場合、右辺の配列の対応値をすべて左辺の配列の添字インデックスにあたる位置に加算する方法について
1 回表示 (過去 30 日間)
古いコメントを表示
皆さま
for文を使うと、添字インデックスになる配列が逐次処理されるので、望んだ処理(同じ添字
の場合に、今の値に新規の値を足しこむ)が行われるのですが、ベクトル化しようとすると
添字になる配列の最後に出てくる時点の値のみが保存されます(あたりまえですね)。
スクリプトは、
a=zeros(128,1);
a(b)=c+a(b);
ここでbは添字インデックスになる配列、cは加算したい配列です。b, cは同じ要素数を持ち
aの要素数より多いです。
ベクトル化に関して、アドバイスがいただけましたらよろしくお願いします。
1 件のコメント
Takumi
2020 年 1 月 29 日
すみません。質問がよくわからないのですが、例えばaのサイズは1×5で添字配列bは b=[1,1,2,2,2,3,4,5] のように最小値1で最大値5(これはaの最大サイズに対応)だが、いくつか重複がある、ということですか? そして今の場合、a(1)にはc(1)とc(2)を加算し、a(2)にはc(3),c(4)およびc(5)を加算したい、ということでしょうか?
回答 (5 件)
Takumi
2020 年 1 月 30 日
for文使わない方法はまだ考え中ですが,こういうのはどうですか?
a = zeros(1,5);
b = [1,1,2,2,2,3,4,5]; % 添字配列
c = [1,2,3,4,5,6,7,8]; % sample
for i=1:length(b)
ind = b(i); % index
a(ind) = a(ind)+c(i);
end
0 件のコメント
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!