Какими должны быть размеры матриц, чтобы использовать поэлементное деление?
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]
, В этом случае первое входное измерение не совпадает, поэтому операция не выполняется.