首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找具有最低值的n个唯一行的索引。

查找具有最低值的n个唯一行的索引。
EN

Stack Overflow用户
提问于 2015-11-16 14:02:23
回答 2查看 74关注 0票数 0

我有一个151x151个矩阵A。它是一个相关矩阵,所以主对角线和主对角线上的重复值都有1s。

我正在寻找一种方法来获得具有最低值的n的许多行的索引。

我想要找到的行数是固定在n上的,n多行必须是唯一的。

例如,让我们说:

代码语言:javascript
复制
n = 10

和数据如下

第1行涉及最低相关(与行/列6),也涉及第三最低相关性(与行/列9)。

这意味着我已经找到了我需要的三个行的索引: 1、6和9。然而,我不需要计算第1行两次,因此我仍然需要找到7行的索引。

我试过这种方法

代码语言:javascript
复制
function [smallestNElements smallestNIdx] = getNElements(A, n)
     [ASorted AIdx] = sort(A);
     smallestNElements = ASorted(1:n);
     smallestNIdx = AIdx(1:n);
end

我得到了here。然而,我认为这种方法根本不适用,因为它适用于向量。当我将它应用到我的2D矩阵时,它只是给出了第一列中最低值的索引。

所谓最低,我指的是绝对最低,而不是“最接近于零”。因此,-0.9-0.1低,而-0.1又比0.05低。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-16 14:36:59

首先,去掉重复的值,让它们成为Inf,这样它们就不会被误认为是最低值:

代码语言:javascript
复制
A1 = tril(A);
A1(A1==0) = Inf;

现在查找n最小值的索引:

代码语言:javascript
复制
[~,idx] = sort(A1(:));
[r,c] = ind2sub(size(A), idx(1:n));

如果您希望包含在最低关联中的n行不重复它们,则会找到最低的n相关性。

代码语言:javascript
复制
[~,idx] = sort(A(:));
[r,c] = ind2sub(size(A), idx);
rows = unique(r,'stable');
result = rows(1:n)
票数 4
EN

Stack Overflow用户

发布于 2015-11-16 15:17:03

这是我的解决办法

代码语言:javascript
复制
[~, idx] = sort(sum(A));
results = idx(1:n);

这是如何工作的sum是接管一个矩阵的列。这给我留下了一个1 x columns向量。将向量排序为最小到最大,并保留索引。然后,保留第一个n数的指数作为结果。下面是为n=4使用数据的结果

代码语言:javascript
复制
result = 
    1
    6
    9
    8
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33737229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档