左辺の添字インデック​スになる配列(左辺の​配列より要素数が多い​)に複数の同値がある​場合、右辺の配列の対​応値をすべて左辺の配​列の添字インデックス​にあたる位置に加算す​る方法について

皆さま
for文を使うと、添字インデックスになる配列が逐次処理されるので、望んだ処理(同じ添字
の場合に、今の値に新規の値を足しこむ)が行われるのですが、ベクトル化しようとすると
添字になる配列の最後に出てくる時点の値のみが保存されます(あたりまえですね)。
スクリプトは、
a=zeros(128,1);
a(b)=c+a(b);
ここでbは添字インデックスになる配列、cは加算したい配列です。b, cは同じ要素数を持ち
aの要素数より多いです。
ベクトル化に関して、アドバイスがいただけましたらよろしくお願いします。

댓글 수: 1

Takumi
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
Takumi 2020년 1월 30일

1 개 추천

素敵な関数がありました.累算による配列作成
b = [1,1,2,2,2,3,4,5]; % 添字配列
c = [1,2,3,4,5,6,7,8]; % sample
a = accumarray(b(:),c(:))';
Toshikatsu
Toshikatsu 2020년 1월 30일

0 개 추천

コメントありがとうございます。
はい、おっしゃるとおりです(書き方がつたわりにくくなってましてすみません)。
for文使わない方法はありますでしょうか。
Takumi
Takumi 2020년 1월 30일

0 개 추천

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
Toshikatsu
Toshikatsu 2020년 1월 30일

0 개 추천

ありがとうございます。
今は添字配列が長くなる(同じポイントに足し算する回数が多い)計算をしてまして、
添字配列をループの引数にするのを避けられたら、と思っています。
Toshikatsu
Toshikatsu 2020년 1월 30일

0 개 추천

ありがとうございます。
改めて先人の皆様に感謝したいです。
こちらの関数つかいます。
今後もよろしくお願いします。

카테고리

도움말 센터File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

질문:

2020년 1월 29일

답변:

2020년 1월 30일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!