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
Odpowiedz
Po
n=7
x=[1;2;3]
to albo
repmat(x,[1 n])
lub
x(:,ones(1,n))
Powiedziałbym, że rozwiązanie oparte na indeksach jest drogą do zrobienia (i generalnie jest szybsze). – gnovice
Dzięki. repmat jest słowem kluczowym, którego szukałem, ale zapomniałem. – stanigator
(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
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
Daje to '[x x x]'. – kennytm
Działa w Octave - zobacz edycję – James
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
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
P: http://stackoverflow.com/questions/2209207/producing-2d-array-od-a-1d-array-in-matlab – Amro