0

我想从下面的代码中消除 for 循环并将其矢量化,但它是一个二维操作。你能帮我么。

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

这里,“distances”是一个 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 矩阵。

4

1 回答 1

1

以下代码应该有所帮助:

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)))]
于 2013-07-10T08:12:27.337 回答