我有一个151x151个矩阵A。它是一个相关矩阵,所以主对角线和主对角线上的重复值都有1s。
我正在寻找一种方法来获得具有最低值的n的许多行的索引。
我想要找到的行数是固定在n上的,n多行必须是唯一的。
例如,让我们说:
n = 10和数据如下

第1行涉及最低相关(与行/列6),也涉及第三最低相关性(与行/列9)。
这意味着我已经找到了我需要的三个行的索引: 1、6和9。然而,我不需要计算第1行两次,因此我仍然需要找到7行的索引。
我试过这种方法
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低。
发布于 2015-11-16 14:36:59
首先,去掉重复的值,让它们成为Inf,这样它们就不会被误认为是最低值:
A1 = tril(A);
A1(A1==0) = Inf;现在查找n最小值的索引:
[~,idx] = sort(A1(:));
[r,c] = ind2sub(size(A), idx(1:n));如果您希望包含在最低关联中的n行不重复它们,则会找到最低的n相关性。
[~,idx] = sort(A(:));
[r,c] = ind2sub(size(A), idx);
rows = unique(r,'stable');
result = rows(1:n)发布于 2015-11-16 15:17:03
这是我的解决办法
[~, idx] = sort(sum(A));
results = idx(1:n);这是如何工作的sum是接管一个矩阵的列。这给我留下了一个1 x columns向量。将向量排序为最小到最大,并保留索引。然后,保留第一个n数的指数作为结果。下面是为n=4使用数据的结果
result =
1
6
9
8https://stackoverflow.com/questions/33737229
复制相似问题