2010-03-11 4 views
5

Próbuję utworzyć macierz, która ma 3 x n, przy czym każda z kolumn jest taka sama. Jak najłatwiej to osiągnąć? Powiązanie?MATLAB: Wypełnianie macierzy z każdą kolumną jest taka sama

+0

Nie jest jasne. Czy chcesz [1 1 1; 2 2 2; 3 3 3] gdzie kolumny są identyczne lub czy [1 2 3; 1 2 3; 1 2 3] gdzie każda kolumna ma tę samą liczbę? – MatlabDoug

+1

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

Odpowiedz

8

Po

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

to albo

repmat(x,[1 n]) 

lub

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

Powiedziałbym, że rozwiązanie oparte na indeksach jest drogą do zrobienia (i generalnie jest szybsze). – gnovice

+0

Dzięki. repmat jest słowem kluczowym, którego szukałem, ale zapomniałem. – stanigator

3

(Octave może być traktowana jako open source/bezpłatnej wersji 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 

Korzystanie repmat jeśli liczba wierszy jest duża.

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

użycie mnożenia z 1 x 3 matrycy te

np x * [1 1 1]

Edycja:

w oktawie:

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

Daje to '[x x x]'. – kennytm

+0

Działa w Octave - zobacz edycję – James

+0

Myślę, że @KennyTM może oznaczać, że daje '[x x x]' (gdzie 'x' to wektor kolumnowy), kiedy OP chce' [x; x; x] '(gdzie' x' jest wektorem wiersza, jak w jego odpowiedzi), ale pytanie jest nieco niejednoznaczne, stąd moja odpowiedź. – Ramashalanka