2010-03-11 7 views
5

Sto provando a creare una matrice di 3 x n, con ognuna delle colonne uguale. Qual è il modo più semplice per raggiungerlo? Concatenazione?MATLAB: Riempimento di una matrice con ogni colonna uguale

+0

non è chiaro. Vuoi [1 1 1; 2 2 2; 3 3 3] dove le colonne sono identiche o vuoi [1 2 3; 1 2 3; 1 2 3] dove ogni colonna è lo stesso numero? – MatlabDoug

+1

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

risposta

8

Dopo

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

è sia

repmat(x,[1 n]) 

o

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

Direi che la soluzione basata su indice è la strada da percorrere (ed è generalmente più veloce). – gnovice

+0

Grazie. repmat è la parola chiave che stavo cercando, ma ho dimenticato. – stanigator

3

(ottava può essere considerato come un/versione gratuita open source di 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 

Utilizzare repmat se il numero di righe è grande.

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

Utilizzare moltiplicazione con 1 x 3 matrice di quelli

esempio, x * [1 1 1]

Edit:

In ottava:

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

Questo dà '[x x x]'. – kennytm

+0

Funziona in Octave - guarda la modifica – James

+0

Penso che @KennyTM possa significare che dà '[x x x]' (dove 'x' è un vettore colonna), quando l'OP vuole' [x; X; x] '(dove' x' è un vettore riga, come nella sua risposta), ma la domanda è leggermente ambigua, quindi la mia risposta. – Ramashalanka

Problemi correlati