我正在寻找一种使用 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/