R中矩阵部分内的最大值

时间:2018-07-01 15:15:08

标签: r loops matrix

我有以下矩阵:

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开头)。

谢谢。

2 个答案:

答案 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