我有一个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
但它似乎并不高效。我希望看到更好的方法。
答案 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