ВОПРОСАматрица Умножение по одному конкретному аспекту
Я ищу элегантный способ для умножения двух массивов вдоль одной конкретной размерности.
Похожий вопрос
Существует уже similar question на официальном форуме MatLab, но нить устарел (2004).
ПРИМЕР
M1
а [6x4x4] матрица и M2
а [6x1] матрица, Я хотел бы, чтобы умножить (поэлементно) M1
с M2
по 3-м измерении M1, чтобы получить матрицу М [ 6x4x4]
эквивалентом:
M1 = rand(6,4,4);
M2 = rand(6,1);
for ii = 1:size(M1,2)
for jj = 1:size(M1,3)
M(:,ii,jj) = M1(:,ii,jj).*M2;
end
end
наглядного примера
вы знаете прохладный способ сделать это делать? (нет петли, 1 или 2 линии раствора, ...)
Ваш код выдает ошибку: «размеры матрицы должны договориться» с указанными размерами. Кроме того, каков размер желаемого результата? Возможно, попробуйте 'M = bsxfun (@times, M1, permute (M2, [2 3 1]));', который дает 'M' тот же размер' M1' –
. Для того, чтобы ваш код работал, вам технически необходимо использовать 'squeeze' на' M1 (ii, jj, :) ', чтобы удалить все размеры синглтона и получить соответствующий вектор-столбец. – rayryeng
@ LuisMendo Выполнение 'M1 (ii, jj, :)' даст вам вектор «1 x 1 x n» и умножение по методу «M2» дает несовместимые измерения. 'squeeze' требуется здесь. – rayryeng