【发布时间】:2017-08-05 20:51:29
【问题描述】:
我有一个像下面这样的矩阵,虽然实际上要大得多:
A = 2 100 250
1 50 25
0 600 700
5 20 30
我想根据 first 列中的最大值查找行值。在上面的示例中,我想根据列值“5”找到第四行,并获取其另外两个行值 20 30。
【问题讨论】:
标签: matlab
我有一个像下面这样的矩阵,虽然实际上要大得多:
A = 2 100 250
1 50 25
0 600 700
5 20 30
我想根据 first 列中的最大值查找行值。在上面的示例中,我想根据列值“5”找到第四行,并获取其另外两个行值 20 30。
【问题讨论】:
标签: matlab
您可以像这样找到矩阵 A 的每一列的最大值的行索引:
[~, maxRowIndicesByColumn] = max(A,[],1);
然后获取第一列中值最大的行
A(maxRowIndicesByColumn(1),:)
ans =
5 20 30
【讨论】:
使用logical indexing,您可以做到紧凑而快速:
result = A(A(:,1)==max(A(:,1)),:)
内部A(:,1)==max(A(:,1)),产生一个逻辑向量(0 或 1),每个元素对应于A 第一列中的一个元素,如果该元素是该元素中最大的,则等于1 A 的第一列(即max(A(:,1)))。在您的示例中,它将是 [0;0;0;1]。
然后,我们从A 中提取逻辑向量中包含1 的每一行。请注意,如果有多个值都相等max(A(:,1)),那么您将获得所有对应的行。
【讨论】: