【发布时间】:2011-11-08 01:52:48
【问题描述】:
有没有办法在 Matlab 中收缩高维张量?
例如,假设我有两个 3 维数组,大小如下:
size(A) == [M,N,P]
size(B) == [N,Q,P]
我想分别在第二个和第一个索引上签约 A 和 B。换句话说,我想将A 视为大小为[M,N] 和B 的矩阵数组是[N,Q] 矩阵的等长数组;我想将这些数组逐个元素(逐个矩阵)相乘以获得大小[M,Q,P]。
我可以通过 for 循环做到这一点:
assert(size(A,2) == size(B,1));
assert(size(A,3) == size(B,3));
M = size(A,1);
P = size(A,3);
Q = size(B,2);
C = zeros(M, Q, P);
for ii = 1:size(A,3)
C(:,:,ii) = A(:,:,ii) * B(:,:,ii);
end
有没有办法避免for循环? (也许适用于任意维数的数组?)
【问题讨论】:
标签: matlab matrix vectorization matrix-multiplication