2010-03-11 4 views
5

Я пытаюсь создать матрицу, которая представляет собой 3 x n, причем каждый из столбцов один и тот же. Каков самый простой способ его достижения? Конкатенация?MATLAB: заполнение матрицы каждым столбцом одинаково

+0

Это не ясно. Вы хотите [1 1 1; 2 2 2; 3 3 3], где столбцы идентичны или вы хотите [1 2 3; 1 2 3; 1 2 3], где каждый столбец является одним и тем же номером? – MatlabDoug

+1

аналогичный Q: http://stackoverflow.com/questions/2209207/producing-2d-array-from-a-1d-array-in-matlab – Amro

ответ

8

После

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

это либо

repmat(x,[1 n]) 

или

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

Я бы сказал, что решение на основе индексов - это способ пойти (и, как правило, быстрее). – gnovice

+0

Спасибо. repmat - ключевое слово, которое я искал, но забыл. – stanigator

3

(октав можно рассматривать как с открытым исходным кодом/бесплатной версии 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 

использования repmat, если число строк велико.

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

Использование умножения с матрицей из них 1 х 3

например, x * [1 1 1]

Edit:

В Октава:

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

Это дает '[x x x]'. – kennytm

+0

Он работает в Octave - см. Edit – James

+0

Я думаю, что @KennyTM может означать, что он дает '[x x x]' (где 'x' - это вектор столбца), когда OP хочет' [x; Икс; x] '(где' x' - это вектор строки, как в его ответе), но вопрос немного неоднозначен, поэтому мой ответ. – Ramashalanka

Смежные вопросы