迭代矩阵Octave中的每一行

时间:2014-09-28 17:09:34

标签: 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

2 个答案:

答案 0 :(得分:16)

如果在z是矩阵时使用for i = z,则i取z的第一列(6.1101; 5.5277; 8.5186)的值,然后取第二列的值,依此类推。见octave manual: 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

答案 1 :(得分:0)

您可以先转置矩阵,然后执行以下语句:

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

虽然在这种情况下你没有索引说明你正在使用哪一行