フィルターのクリア

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

32 ビュー (過去 30 日間)
nknknknk
nknknknk 2017 年 10 月 24 日
編集済み: michio 2017 年 10 月 25 日
配列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 件のコメント
michio
michio 2017 年 10 月 25 日
N = N + n[i];
N = N + n(i);
に変えて実行したところ、正しく計算されている模様です。 ちなみに n のサイズは必ずしも 20 の倍数ではない場合もありますか?

サインインしてコメントする。

採用された回答

michio
michio 2017 年 10 月 25 日
編集済み: michio 2017 年 10 月 25 日
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 件)

カテゴリ

Help Center および File Exchangeコマンドの入力 についてさらに検索

Community Treasure Hunt

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

Start Hunting!