2015-11-12 3 views

ответ

5

Создать два вектора индексов. Сделайте один вертикальный, один горизонтальный. Затем используйте bsxfun(), чтобы разделить элемент.

i = (1:9)'; % ' 
j = 1:5; 

M = bsxfun(@rdivide,i,j); 
0

Обозначение ./ обозначает элемент мудрой работы.

[m,n]=ndgrid(1:9,1:5); 
M = m./n; 

(я не люблю использовать i И j потому что вы делаете ссылки sqrt(-1) сложнее.)

2

Вы можете использовать векторное умножение, как это:

row=1:10; 
col=1:10; 
M=row'*(1./col); 
+0

Смешной. Я протестировал свое решение против вас. И результаты для некоторых индексов незначительно отличаются. Существует небольшая ошибка из-за потери информации при умножении. –

+0

Интересно. Я думал, что 'bsxfun' или' ndgrid' будет медленнее, чем классическая сила операций Matlab-матриц. У вас есть идея, почему мое решение является самым медленным ..? Что такое потеря информации при умножении? – Adiel

+1

Ваше решение является самым быстрым. '' ndgrid() '' самый медленный. Разница в наших решениях, вероятно, связана с тем, что '' 1./col'' является числовым значением, которое уже округлено на последней цифре. Эта ошибка округления будет умножена и поэтому появится в решении. –

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