arrays - 如何在matlab中向量化这个矩阵乘法

标签 arrays matlab matrix

我有 2 个矩阵 A (nxm) 和 B (nxd),想要将 A 的每一列逐元素与 B 的相乘。有 m A 中的列和 B 中的 n 个 1xd 向量,因此结果是 m nxd 矩阵。然后我想对 sum(result_i, 1) 进行求和以获得 m 1xd 向量,我想应用 vertcat 来获得 mxd 矩阵。我正在使用 for 循环执行此操作,但速度很慢,因为 n 和 d 很大。我怎样才能在matlab中对其进行矢量化以使其更快?谢谢。

编辑:
你说得对:我对自己的问题感到困惑。我所说的“将 A 的每一列与 B 的一行相乘按元素”的意思是将 A 列的 n 个元素与 B 的相应 n 行相乘。我想要做什么A 的一列如下(我对 A 的 m 列重复此操作,然后将 C 的向量垂直聚合在一起以获得 mxd 矩阵):

column_of_A =

     3
     3
     1


B =

     3     1     3     3
     2     2     1     2
     1     3     3     3


C = sum(diag(column_of_A)*B, 1)

     16    12    15    18

最佳答案

您可以通过以下方式矢量化您的操作。但请注意,矢量化的代价是更高的内存使用量,因此该解决方案最终可能不适合您。

%# multiply nxm A with nx1xd B to create a nxmxd array
tmp = bsxfun(@times,A,permute(B,[1 3 2]));

%# sum and turn into mxd
out = squeeze(sum(tmp,1));

您可能希望在一行中完成所有操作,这可能有助于 Matlab JIT 编译器节省内存。

编辑

如果您没有 bsxfun,这里有一种替换第一行的方法

[n,m] = size(A);
[n,d] = size(B);
tmp = repmat(A,[1 1 d]) .* repmat(permute(B,[1 3 2]),[1,m,1]);

关于arrays - 如何在matlab中向量化这个矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5580219/

相关文章:

Matlab:如何重新排序(重新组织)矩阵

matlab - matlab中的多个矩阵没有递归

php - 我如何获取一个包含 sql 查询的 php 变量,并使用 $db->updatePhoneNumbers() 将其添加到现有的 sql 查询中?

c - 在 C 中获取没有空格的输入

performance - r-连续匹配,MATLAB

python - theano 张量的 pdist

matlab - 显示来自 MATLAB 的信息而无需换行

r - 在 R 中,如何用另一个向量的值替换具有特定条件的矩阵中的值?

arrays - Swift 数组按字母顺序和组顺序排序

c - 如何在 C 中读取 .txt