matlab - 将 n 个长度为 p 的向量乘以 n 个大小为 pxp 的矩阵

标签 matlab matrix matrix-multiplication complex-numbers tensor

我有 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/

相关文章:

matlab - 在 MATLAB 中为结构数组的字段赋值

通过 M<N 的 GSL 计算矩阵的零空间会产生错误

python - 对矩阵本身求幂 N 次?

performance - 矩阵乘法中的 bsxfun 实现

使用 OpenMP 进行稀疏矩阵乘法缓存管理

arrays - MATLAB 从 for 循环创建数组

function - 如何将任意数据类型写入Matlab元胞数组

matlab - 设置图例的 alpha 值(透明度)以匹配 MatLab 绘图中的 alpha

python 为什么 max(max(float_2d_array)) 给出错误的答案?

java - OpenGL - 矩阵运算