web-dev-qa-db-ja.com

行列Octaveの各行を反復する

[〜#〜] z [〜#〜]の各行をどのように反復するか[〜#〜] z [〜#〜]2 * m行列:

6.1101,17.592
5.5277,9.1302
8.5186,13.662

このループ内で各Z(i)(j)にアクセスするにはどうすればよいですか?

例えば:

for i = z
  fprintf('Iterating over row: '+ i);
  disp (i:1);
  disp (i:2);
end

出力されます:

Iterating over row: 1
6.1101
17.592
Iterating over row: 2
5.5277
9.1302
Iterating over row: 3
8.5186
13.662
13
Dan Kanze

Zが行列のときにfor i = zを使用すると、iはzの最初の列の値(6.1101; 5.5277; 8.5186)を取得し、次に2番目の列を取得します。参照 オクターブマニュアル:The-for-Statement

あなたが使用できるすべての要素を反復したい場合

z = [6.1101,17.592;5.5277,9.1302;8.5186,13.662]

for i = 1:rows(z)
  for j = 1:columns(z)
    printf("z(%d,%d) = %f\n", i, j, z(i,j));
  endfor
endfor

出力:

z(1,1) = 6.110100
z(1,2) = 17.592000
z(2,1) = 5.527700
z(2,2) = 9.130200
z(3,1) = 8.518600
z(3,2) = 13.662000

ただし、forループはオクターブが遅いため、ベクトル化されたメソッドを使用することが望ましい場合があることに注意してください。多くの関数は、最も一般的な計算に行列入力を使用できます。

たとえば、全体の合計を計算する場合は、次のようにします。

octave> sum (z(:))
ans =  60.541

または、隣接する行との違い:

octave> diff (z)
ans =

  -0.58240  -8.46180
   2.99090   4.53180
22
Andy

最初に行列を転置してから、次のようにforステートメントを実行できます。

for i = z'
    disp(i(1))
    disp(i(2))
end

この場合、使用している行を示すインデックスはありませんが

1
johnnyodonnell