如何在Matlab中对二维矩阵中的运算进行矢量化



我想从下面的代码中消除for循环并对其进行矢量化,但这是一个二维操作。你能帮帮我吗?

for i=1:10
    savingsFull(i,:) = distances(i,9)+distances(9,knnIdx(i,:))-distances(i,knnIdx(i,:));
end

这里,"距离"是10x10对称矩阵,"knnIdx"是10x2矩阵,如下所示:

 1    10
 2    10
 3     8
 4     8
 5     4
 6     5
 7     2
 8     4
 9     8
10     1

"savingsFull"也是一个10x2矩阵。

以下代码应该会有所帮助:

savingsFull = distances(:, [9 9]) + [distances(9, knnIdx(:, 1)).', distances(9, knnIdx(:, 2)).'] - [diag(distances(:, knnIdx(:, 1))), diag(distances(:, knnIdx(:, 2)))]

如果knnIdx的第一列是从1到10的结果数,那么您可以简化为

savingsFull = distances(:, [9 9]) + [distances(9, knnIdx(:, 1)).', distances(9, knnIdx(:, 2)).'] - [diag(distances), diag(distances(:, knnIdx(:, 2)))]

最新更新