for i = 1:N
for j = 1:M
for c = 1:3
A(:,:,c,i) = A(:,:,c,i).*B(:,:,j);
end
end
end
是否有可能通過向量化消除最內層的循環,例如?如何加速這個數組乘法?
for i = 1:N
for j = 1:M
for c = 1:3
A(:,:,c,i) = A(:,:,c,i).*B(:,:,j);
end
end
end
是否有可能通過向量化消除最內層的循環,例如?如何加速這個數組乘法?
首先,你可以通過左乘矩陣消除了j中的循環:
B2 = prod(B, 3); % Element-wise product along third dim
for i = 1:N
for c = 1:3
A(:,:,c,i) = A(:,:,c,i) .* B2;
end
end
然後你可以使用repmat平鋪矩陣B2出來,消除其他兩個環。我有一些困難,包裹我的周圍4D-Matricies頭,但它應該是這樣的:
B2 = prod(B, 3); % Element-wise product along third dim
B3 = repmat(B2, [1 1 3 N]);
A = A .* B3;
或(甚至更好)使用bsxfun:
B2 = prod(B, 3); % Element-wise product along third dim
A = bsxfun(@times, A, B2);
bsxfun將使用較少的內存,因爲它「幾乎複製「B2。
你的代碼是否正確? 'j'循環無用,只有值'j = M'存活。用你的代碼,你可以刪除第二個循環,並設置'j = M;' –
哦,'j'循環沒問題,變量名稱不正確,現在我修復了它,謝謝。 –
同樣的問題。只有'j = M'真的被使用! 'j'的其他值的結果是_overwritten_ –