Filter löschen
Filter löschen

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

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

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

michio
michio am 25 Okt. 2017
Bearbeitet: michio am 25 Okt. 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)
を実行してみてください。

Weitere Antworten (0)

Kategorien

Mehr zu コマンドの入力 finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!