web-dev-qa-db-fra.com

Itérer sur chaque ligne de la matrice Octave

Comment itérer sur chaque ligne deZZest un 2 * m matrix:

6.1101,17.592
5.5277,9.1302
8.5186,13.662

Comment accéder à chaque Z(i)(j) à l'intérieur de cette boucle?

Par exemple:

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

Serait sortie:

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

Si vous utilisez for i = z lorsque z est une matrice, alors i prend la valeur de la première colonne de z (6.1101; 5.5277; 8.5186), puis de la deuxième colonne, etc. Voir manuel octave: The-for-Statement

Si vous voulez parcourir tous les éléments, vous pouvez utiliser

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

qui produit:

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

Mais gardez à l'esprit que les boucles for sont d'octave lente, il peut donc être souhaitable d'utiliser une méthode vectorisée. De nombreuses fonctions peuvent utiliser une entrée de matrice pour les calculs les plus courants.

Par exemple, si vous souhaitez calculer la somme globale:

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

Ou la différence entre les rangées adjacentes:

octave> diff (z)
ans =

  -0.58240  -8.46180
   2.99090   4.53180
16
Andy

Vous pouvez d'abord transposer la matrice puis faire pour statement comme ceci:

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

Bien que dans ce cas, vous ne disposerez pas d’un index indiquant la ligne que vous utilisez.

0
johnnyodonnell