我有 n
个长度为 p
的复数向量,我想将它们乘以 n
个大小为 p
的复数矩阵>-by-p
。我正在寻找在 MATLAB 中执行此操作的最有效方法。如果重要的话,我想象 n 大而 p 小。
下面显示了一个使用循环的示例(我想避免使用循环)。
N = 1e4;
p = 5;
A = randn(p, N); % N vectors of length p
B = randn(p, p, N); % N matrices of size pxp
C = zeros(p, N);
for k = 1:N
C(:, k) = B(:, :, k) * A(:, k);
end
有人建议我可以使用张量函数有效地实现这一点,但我还没有弄清楚。
最佳答案
这是使用 implicit expansion 的方法:
C = permute(sum(B.*permute(A, [3 1 2]), 2), [1 3 2]);
对于旧的 Matlab 版本(R2016b 之前),您需要用 bsxfun
重写它:
C = permute(sum(bsxfun(@times, B, permute(A, [3 1 2])), 2), [1 3 2]);
关于matlab - 将 n 个长度为 p 的向量乘以 n 个大小为 pxp 的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52485659/