performance - 寻找使用 MATLAB 计算矩阵的更快方法

标签 performance matlab matrix

我正在寻找一种使用 MATLAB 计算矩阵的更快方法:

给定一个 m×n 矩阵 A ,我想返回一个矩阵B加上所有 i th 和 j第 行使得 j >= i 。例如。, 让A=[1 2 3 4; 2 3 4 5; 3 4 5 6] ,然后B可以计算为

idx=1;
nbrows=size(A,1);
B=zeros(nbrows*(nbrows+1)/2,size(A,2)); % the size of B can be determined
for i = 1:nbrows
  for j = i:nbrows
    B(idx,:) = A(i,:) + A(j,:);
    idx = idx + 1;
  end
end

现在,我有一个非常大的 A ,我想知道如何计算矩阵 B以更有效的方式。

如何加快计算速度?

最佳答案

您可以预先计算行的索引并迭代列,而不是迭代行:

nbcols = size(A, 2);

[r, c] = find(tril(true(nbrows)));

rc = [r c];

for i = 1:nbcols
    B(:, i) = sum(reshape(A(rc, i), [], 2), 2);
end

等效的可能效率较低的解决方案:

for i = 1:nbcols
    B(:, i) = A(r, i) + A(c, i);
end

由于 A 非常大,因此完全矢量化的解决方案:

B = A(r,:) + A(c,:);

不应该比循环版本更高效。

关于performance - 寻找使用 MATLAB 计算矩阵的更快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64423481/

相关文章:

matlab - 找到两个非连续向量的公共(public)段

matlab - Matlab关于Audioplayer GUI的问题

python - 为什么我使用 scipy 将两个 CSR 矩阵相乘时会消耗这么多内存?

visual studio c 中每个函数的自定义序言

performance - Http 性能 - 许多小请求或一个大请求

performance - 什么对 SAS 数据集性能的影响更大 - 观察数量或变量数量?

list - SML 是否为非常大的集合提供了一个有效的不可变列表实现,或者应该使用数组和变异来进行这种优化?

linux - 从 Linux 命令行在 MATLAB 中运行选择

无法释放动态矩阵

c++ - 如何使用变换通过 Eigen 中的 Matrix3d 旋转矩阵旋转点 MatrixXd