配列の各要素同士を足すには?

25 views (last 30 days)
nknknknk
nknknknk on 24 Oct 2017
Edited: michio on 25 Oct 2017
配列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
michio on 25 Oct 2017
N = N + n[i];
N = N + n(i);
に変えて実行したところ、正しく計算されている模様です。 ちなみに n のサイズは必ずしも 20 の倍数ではない場合もありますか?

Sign in to comment.

Accepted Answer

michio
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)
を実行してみてください。

More Answers (0)

Categories

Find more on コマンドの入力 in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!