Array multiplication along certain dimension?
80 次查看(过去 30 天)
显示 更早的评论
I have a 4-D array with dimensions A = A1 x A2 x A3 x N and a vector with dimensions V = 1 x N. I would like to multiply each element in the array A with vector V along fourth dimension and take a sum along the same dimension to form a matrix B = A1 x A2 x A3. Currently I am using a loop to achieve this, but is there any faster method to achieve the same result? Thanks!
A1 = 3;
A2 = 3;
A3 = 3;
N = 10;
A = ones(A1, A2, A3, N);
V = ones(1, N);
B = NaN(A1, A2, A3);
for i = 1:A1
for j = 1:A2
for k = 1:A3
B(i,j,k) = squeeze(A(i,j,k,:))' * V';
end
end
end
0 个评论
采纳的回答
David Goodmanson
2017-11-24
编辑:David Goodmanson
2017-11-24
Hi Visa,
This seems to work
A1 = 2;
A2 = 3;
A3 = 4;
N = 7;
A = rand(A1, A2, A3, N);
V = rand(1, N);
% ---- method 1
B1 = NaN(A1, A2, A3);
for i = 1:A1
for j = 1:A2
for k = 1:A3
B1(i,j,k) = squeeze(A(i,j,k,:))' * V';
end
end
end
% ---- method 2
D = permute(A,[4 1 2 3]);
E = reshape(D,N,A1*A2*A3);
F = V*E;
B2 = reshape(F,A1,A2,A3);
max(max(max(max(abs(B1-B2))))) ans = 8.8818e-16
更多回答(1 个)
James Tursa
2017-11-27
Another way:
B = sum(bsxfun(@times,A,reshape(V,1,1,1,numel(V))),4);
Or in later versions of MATLAB:
B = sum(A.*reshape(V,1,1,1,numel(V)),4);
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrices and Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!