1

我有两个矩阵AB,它们都是Nx3矩阵。

我目前正在使用以下方法获取矩阵 A 每一行的最大值和索引:

[maxA, idx] = max(A, [], 2)

idx(j)指示哪一列包含 row 的最大值j。现在我想从矩阵 B 中选择那些相同的位置。

我目前已经使用循环实现了这个:

for j = 1:numel(idx)
   maxB(j) = B(j, idx(j))
end

我当前的实现足够快,尽管我更喜欢避免不必要的循环,所以有没有办法在没有循环的情况下表达这一点?

4

3 回答 3

2

您可以将单维索引构建到矩阵中并以这种方式获取它们。matlab中的所有多维矩阵都可以被寻址。

您可以使用

maxB = B(sub2ind([1:length(idx)]',idx(:)));
于 2012-06-27T16:59:42.970 回答
2

您可以构建一个线性索引向量(我希望 B 与 A 大小相同):

vec_indices = sub2ind(size(A), 1:numel(idx), idx);

然后您可以直接使用该向量进行查找:

maxB = B(vec_indices)
于 2012-06-27T16:57:47.370 回答
0

在一行中:

maxB = B(A == max(A, [], 2) * ones(1, 3));

但这并不安全。它假定A.

于 2012-06-27T21:17:01.037 回答