2013-11-17 2 views
1

У меня есть две матрицы:Matlab - создать новую матрицу из сочетания двух других

A = [1 2; 3 4; 2 6; 4 7]; 
B = [2 4; 4 4; 4 3; 5 8]; 

Как я могу создать новую матрицу, что он будет иметь порядок, как, первый ряд, затем первый B ряд, затем второй ряд, то второй ряд B и т.д.

Как это:

C = [1 2; 2 4; 3 4; 4 4; 2 6; 4 3; 4 7; 5 8]; 

ответ

1

I п ваш конкретный пример, вы можете написать:

C(1:2:7,:) = A ; C(2:2:8,:) = B 

См:

octave:1> A = [1 2; 3 4; 2 6; 4 7]; 
octave:2> B = [2 4; 4 4; 4 3; 5 8]; 
octave:3> C(1:2:7,:) = A ; C(2:2:8,:) = B 
C = 

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

octave:4> 

Теперь предполагая A и B имеют одинаковый размер, то вы можете написать

C(1:2:2*size(A,1)-1,:) = A ; C(2:2:2*size(A,1),:) = B 

быть более общим.

+0

Как я мог написать это с циклом 'for', как если бы у меня были длинные матрицы? Мне пришлось бы писать так вручную для многих строк. – Andrius

+0

Не уверен, что я понимаю. Вы имеете в виду, что у вас больше матриц, чем 'A' и' B', или что 'A' и' B' имеют много строк? – damienfrancois

+0

Обе матрицы A и B имеют одинаковую длину, но у них больше строк, чем в примере. Поэтому я спросил, есть ли еще один общий способ сделать это. – Andrius

2

Если вы готовы, чтобы ваши руки грязные с reshape -ing:

C = reshape([A.';B.'], 2, []).'; 

Почему это работает?
Matlab сохраняет свои матрицы в памяти как стек столбцов. Транспонирование A и B и укладка их строк (теперь столбцов) одна за другой в памяти создает матрицу 4-на-n с правильным порядком элементов. Теперь мы имеем reshape эту матрицу, чтобы иметь только две строки и перенести ее обратно, чтобы получить желаемый результат. Та-да!

+0

Почему '.'', а не просто' ''? – damienfrancois

+2

@damienfrancois приятный вопрос: если вы работаете с действительными числами, то нет никакой разницы. Однако для комплексных чисел '' 'дает эрмитовую транспонированную (транспонированную + комплексно-сопряженную), а '.'' переносит только матрицы. Так как большинство людей не работают ежедневно с комплексными числами, чаще всего используется '' 'для транспонирования, но если вы хотите быть более строгим,'.'' на месте. Мне когда-то приходилось писать небольшой скрипт, который включал сложные числа, и мне потребовалось много времени для отладки, пока я не понял, что использовал '' ', где я должен был использовать'.''. Итак, это зависит от вас. – Shai

+0

+1 специально для несопряженного транспонирования –