3 votes

Utilisation de plages dans les matrices Matlab/Octave

Supposons que je veuille créer une matrice 100x100 dont chaque ligne contient les éléments 1-100

A = [1:100; 1:100; 1:100... n]

Il est évident que la formation d'une matrice est une mauvaise idée, car elle m'obligerait à créer 100 lignes de l'intervalle 1:100.

Je pense que je pourrais le faire en prenant un tableau de "uns" et en multipliant chaque "r". par un vecteur... mais je ne suis pas sûr de savoir comment faire...

a = (ones(100,100))*([])

? ?

Des conseils ?

5voto

Phonon Points 6751

Vous pouvez utiliser le matrice de répétition fonction ( repmat() ). Votre code ressemblerait alors à ceci :

A = repmat( 1:100, 100, 1 );

Cela signifie que vous répétez le premier argument de repmat 100 fois verticalement et une fois horizontalement (c'est-à-dire que vous le laissez tel quel horizontalement).

5voto

arne.b Points 2413

Vous pouvez multiplier un vecteur colonne de 100 1 avec un vecteur de lignes de 1:100 .

ones(3,1)*(1:3)
ans =

   1   2   3 
   1   2   3
   1   2   3

Vous pouvez également utiliser repmat ([edit] comme l'a écrit Phonon quelques secondes avant moi [/edit]).

2voto

Oui, repmat est la solution facile, et même sans doute la bonne solution. Mais le fait de savoir comment visualiser votre objectif et comment créer quelque chose qui permet d'atteindre cet objectif vous apportera des avantages à long terme dans MATLAB. Essayez donc d'autres solutions. Par exemple...

cumsum(ones(100),2)

bsxfun(@plus,zeros(100,1),1:100)

ones(100,1)*(1:100)

cell2mat(repmat({1:100},100,1))

et l'ennuyeux

repmat(1:100,100,1)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X