删除邻接矩阵中的一部分值
Remove a proportion of values in an 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% 但我不确定如何对整个矩阵进行排序(而不是对单个 column/row).有人能帮忙吗?
编辑:我想我可以 reshape
M 然后 sort
它,但这似乎效率不高。我希望看到更好的方法。
您可以尝试以下方法:
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
我有一个 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% 但我不确定如何对整个矩阵进行排序(而不是对单个 column/row).有人能帮忙吗?
编辑:我想我可以 reshape
M 然后 sort
它,但这似乎效率不高。我希望看到更好的方法。
您可以尝试以下方法:
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