配列の各要素同士を足すには?
25 views (last 30 days)
Show older comments
配列n[i]が(51×1)の配列の時に、 n[1],,,n[20]、 n[21],,,n[40]、・・・ のようにn[i]を20個ずつ各要素を足し、その結果の配列を水平連結させたいです。
下記プログラムで、n[i]にはデータが正常に入っていることは確認できており、display(N)でNの値を見ると、 N = NaN NaN NaN......... と表示されます。 どこが間違っているでしょうか。
理解し辛い質問で申し訳ございません。
よろしくお願い致します。
N=0;
%n[1]からn[400]までのデータがある
for i=1:400
%n[i]を20個分各要素足す
N = N + n[i];
display(N)
%20個ずつ足した結果NをDataに代入
if i == 20
Data = N;
N = 0;
end
if rem(i,20) == 0 && i>= 40
%配列を水平に連結
Data = horzcat(Data,N);
N = 0;
end
end
1 Comment
michio
on 25 Oct 2017
N = N + n[i];
を
N = N + n(i);
に変えて実行したところ、正しく計算されている模様です。 ちなみに n のサイズは必ずしも 20 の倍数ではない場合もありますか?
Accepted Answer
michio
on 25 Oct 2017
Edited: michio
on 25 Oct 2017
n が 1x400の1次元配列、最終的に欲しい結果を N とすると N は 1x20 の1次元配列でしょうか? すなわち N(1) は n(1)からn(20) 和、N(2) は n(21) から n(40) の和、、といった感じ。
その場合、n を一旦 20x20 の2次元配列に変形してから sum 関数で 20要素づつ和を取る処理にするとコードがシンプルかつ処理速度もかなり向上しますよ(下の例だと700倍位)。
実行例です:
n = 1:400;
n20x20 = reshape(n,20,20);
N = sum(n20x20)
reshape 関数の挙動を確認するには、
n = 1:9
n3x3 = reshape(n,3,3)
を実行してみてください。
0 Comments
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!