我有以下矩阵:
distances nodes
1 0.7086445 1, 2, 3
2 0.6975919 1, 2, 4
3 0.7123708 1, 3, 4
4 0.6778857 2, 1, 3
5 0.6886261 2, 1, 4
6 0.6922472 2, 3, 4
7 0.7041895 3, 1, 2
8 0.7005059 3, 1, 4
9 0.6895803 3, 2, 4
10 0.8142009 4, 1, 2
11 0.7973094 4, 1, 3
12 0.8099419 4, 2, 3
对于nodes
的第一个元素是相同值的矩阵的每个部分(即三行的每个块),我想执行以下操作:如果{{1 }},该块大于该块外部矩阵中的所有其他距离,然后识别该块。
例如,在不包含10、11和12和I的矩阵部分中,第10、11和12行的distances
比所有其他distances
大想要标识该块(distances
以4开头)。
谢谢。
答案 0 :(得分:0)
我确定有一个更优雅的解决方案,但是这是我的方法:
tf.image_decode_png
答案 1 :(得分:0)
您可以首先计算某个距离大于的距离数。例如,距离数10大于或等于12个距离,即最大距离with(dat,rowSums(outer(distances,distances,">=")))
或with(dat,match(distances,sort(distances)))
,然后将它们按nodes
的第一个值分组,并确定是否所有排序后的块之间的差为1,即它们彼此跟随,即它们来自同一块,并且如果块包含最大值,则该块大于所有其余块。
dat$ind=sub("(\\d).*","\\1",dat$nodes)
merge(subset(stack(with(dat,by(match(distances,sort(distances)),ind,
function(x) all(diff(sort(x))==1)&any(x==nrow(dat))))),values),dat,by="ind")
ind values distances nodes
1 4 TRUE 0.8142009 4, 1, 2
2 4 TRUE 0.7973094 4, 1, 3
3 4 TRUE 0.8099419 4, 2, 3