2015-04-24 3 views
0

(Просто приближающегося Matlab для личного понимания), предположим, что у меня есть Z, Y матрица в этом случае Z = 1 Y = 3Инкрементальный матрица без петли

A = 1: 3

output: 1 2 3 

сейчас Мне нужно увеличить матрицу вертикально, чтобы получить:

1 2 3 
2 4 6 
3 6 9 

Как я могу достичь этого без использования петли?

ответ

4

Самый простой способ - использовать векторное умножение.

Если ваша цель состоит в том, чтобы получить

1 2 3 
2 4 6 
3 6 9 

дал A=1:3

все, что вам нужно сделать, это

A.'*A 

Это займет векторное произведение транспонированной (.') из A с A сам

+0

Большое спасибо. Оценил. – FeliceM

+1

хорошо вы явно написали ** transpose ** - оператор транспонирования '.'' -' '' является сопряженным транспонированием. Хотя в этом случае это не имеет значения, но это не совсем правильно. [** Это просто вопрос чистого программирования **] (http://stackoverflow.com/questions/25150027/using-transpose-versus-ctranspose-in-matlab). – thewaywewalk

+1

@thewaywewalk, тогда, пожалуйста, примите мои извинения, я никогда не видел эту разницу. восстановление вашего редактирования. – Federico

2

Другой способ заключается в использовании bsxfun:

A = [1 2 3]; 
B = bsxfun(@times, A.', A); 

Это, по существу, тот же ответ, как Федерико, где берется внешнее произведение вектора.

+1

Большое спасибо. Приятно знать – FeliceM

+1

Если вы ориентируетесь, это может быть подход победителя, который вы знаете! – Divakar

+0

@ Дивакар - хе-хе-хе, конечно, ты скажешь это :)! – rayryeng

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