配列の各要素同士を足すには?
    17 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!