2010-03-11 9 views
5

J'essaye de créer une matrice qui est 3 x n, avec chacune des colonnes étant les mêmes. Quel est le moyen le plus facile de l'atteindre? Enchaînement?MATLAB: Remplir une matrice avec chaque colonne étant la même

+0

Il est pas clair. Voulez-vous [1 1 1; 2 2 2; 3 3 3] où les colonnes sont identiques ou voulez-vous [1 2 3; 1 2 3; 1 2 3] où chaque colonne est le même nombre? – MatlabDoug

+1

similaire Q: http://stackoverflow.com/questions/2209207/producing-2d-array-from-a-1d-array-in-matlab – Amro

Répondre

8

Après

n=7 
x=[1;2;3] 

il est soit

repmat(x,[1 n]) 

ou

x(:,ones(1,n)) 
+0

Je dirais que la solution basée sur l'index est le chemin à parcourir (et c'est généralement plus rapide). – gnovice

+0

Merci. repmat est le mot clé que je cherchais, mais j'ai oublié. – stanigator

3

(Octave peut être considéré comme une open source/version gratuite de Matlab)

octave-3.0.3:2> rowvec = [1:10] 
rowvec = 

    1 2 3 4 5 6 7 8 9 10 

octave-3.0.3:3> [rowvec; rowvec; rowvec] 
ans = 

    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 

Utilisez repmat si le nombre de lignes est grand.

octave-3.0.3:7> repmat(rowvec, 10, 1) 
ans = 

    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 
    1 2 3 4 5 6 7 8 9 10 
2

Utilisation multiplication avec une matrice 1 x 3 de ceux

par exemple, x * [1 1 1]

Edit:

Dans Octave:

octave-3.0.3.exe:1> x = [1;2;3;4] 
x = 

    1 
    2 
    3 
    4 


octave-3.0.3.exe:5> x * [1 1 1] 
ans = 

    1 1 1 
    2 2 2 
    3 3 3 
    4 4 4 
+0

Ceci donne '[x x x]'. – kennytm

+0

Cela fonctionne dans Octave - voir l'édition – James

+0

Je pense que @KennyTM pourrait signifier qu'il donne '[x x x]' (où 'x' est un vecteur de colonne), quand l'OP veut' [x; X; x] '(où' x' est un vecteur ligne, comme dans sa réponse), mais la question est légèrement ambiguë, d'où ma réponse. – Ramashalanka

Questions connexes