performance - 如何在不循环的情况下在 MATLAB 中乘以张量?

标签 performance matlab multidimensional-array vectorization multiplication

假设我有:

A = rand(1,10,3);
B = rand(10,16);

我想得到:

C(:,1) = A(:,:,1)*B;
C(:,2) = A(:,:,2)*B;
C(:,3) = A(:,:,3)*B;

我能否以某种方式将其乘以一行以使其更快?

如果我像这样创建新的张量 b 会怎样

for i = 1:3
    b(:,:,i) = B;
end

我可以将 A 和 b 相乘以获得相同的 C 但速度更快吗?通过上面的循环创建 b 所花费的时间并不重要,因为我将需要 C 来处理许多不同的 A-s,而 B 保持不变。

最佳答案

置换 AB 的维度,然后应用矩阵乘法:

C = B.'*permute(A, [2 3 1]);

关于performance - 如何在不循环的情况下在 MATLAB 中乘以张量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31497176/

相关文章:

C++11 std::function 比虚拟调用慢?

c - 性能 - 在 C 中逐行读取巨大的 FASTA 文件

matlab - dlmwrite 循环使用

c - strcmp 如何用于二维数组?

java - java中二维矩阵乘法的问题

php - usort 对多个字段进行排序

php - Laravel 5可以处理1000个并发用户而不会造成严重滞后吗?

mysql - 从一个表中获取不在另一特定表中的所有 mysql 条目

Matlab 单元测试覆盖率

matlab - 包内的`localfunctions`