Какими должны быть размеры матриц, чтобы использовать поэлементное деление?

res = A ./ B

Я старался,

res = [1 2] ./ [1 2]
res = [1 2] ./ [1 2; 2 3] 
res = [1 2] ./ [1 2; 2 3; 3 4]
res = [1 2; 2 3] ./ [1 2; 2 3] 

Все они работают.

Но следующее не работает,

res = [1 2; 2 3] ./ [1 2; 2 3; 3 4] 

Итак, каково правило для размерности на самом деле?

1 ответ

Решение

Это некоторая путаница, возникшая благодаря новой автоматической трансляции измерений в MATLAB.

Прежде всего, обратите внимание, что ./ Оператор является поэлементной операцией.

В версиях MATLAB до R2016b использование этого оператора потребовало бы, чтобы два входа были абсолютно одинакового размера.

[1 2] ./ rand(4)

Размеры матрицы должны совпадать.

Если вы хотите применить эту поэлементную операцию к нескольким столбцам в матрице (как вы показали на втором примере), вам пришлось использовать bsxfun

bsxfun(@rdivide, [1 2], [1 2; 2 3]);

Правило состоит в том, что не одинарные размеры двух входов должны совпадать.

Non-singleton размеры двух входных массивов должны соответствовать друг другу.

Таким образом, в приведенном выше примере первый массив имеет первое измерение 1 и второе измерение 2, Второй вход имеет первое измерение 2 и второе измерение 2 поэтому этот критерий удовлетворен.

В R2016b MATLAB ввел автоматическую трансляцию измерений, которые имеют тот же эффект, что и bsxfunПросто сейчас встроен в оператора. Для выполнения операции требуются те же критерии

В вашем примере это не удалось

[1 2; 2 3] ./ [1 2; 2 3; 3 4]

Размер первого входа [2 x 2] и размер второго [3 x 2], В этом случае первое входное измерение не совпадает, поэтому операция не выполняется.

Другие вопросы по тегам