删除邻接矩阵中的一部分值

时间:2017-03-21 13:58:00

标签: matlab sorting adjacency-matrix

我有一个6x6邻接矩阵 M 。我想只处理对角线下面的所有值1(即tril(M,-1))。对于剩余的值,我想对矩阵进行二值化,使得前20%的值转换为1,而较低的80%转换为零。 M是这样的:

-0.01   0.09    -0.16   -0.11   0.29    0.11
0.09    0.00    0.09    0.09    0.48    0.44
-0.16   0.09    0.01    -0.09   0.09    0.14
-0.11   0.09    -0.09   -0.01   -0.18   -0.04
0.29    0.48    0.09    -0.18   0.00    0.05
0.11    0.44    0.14    -0.04   0.05    0.00

输出将是:

0.00    0.00    0.00    0.00    0.00    0.00
0.00    0.00    0.00    0.00    0.00    0.00
0.00    0.00    0.00    0.00    0.00    0.00
0.00    0.00    0.00    0.00    0.00    0.00
0.29    0.48    0.00    0.00    0.00    0.00
0.00    0.44    0.00    0.00    0.00    0.00

我以为我可以sort对角线以下的所有值然后只选择20%,但我不确定如何对整个矩阵进行排序(而不是对单个列/行进行排序) )。有人可以帮忙吗?

编辑:我想我可以reshape M然后sort但它似乎并不高效。我希望看到更好的方法。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方法:

trilMask = logical(tril(ones(size(M)),-1)); %generates trilMask
M(~trilMask ) = 0; %zero-out values outsideMask
relevantVals = sort(M(trilMask)); %sort values
T = relevantVals(round(length(relevantVals )*0.8)+1); %calc threshold,
M(M<T) = 0 %perform thresholding

结果:

M =

     0         0         0         0         0         0
     0         0         0         0         0         0
     0         0         0         0         0         0
     0         0         0         0         0         0
0.2900    0.4800         0         0         0         0
     0    0.4400         0         0         0         0