R中是否有任何函数可以找到矩阵中最常出现的元素?我有一个包含图像像素的矩阵。我想找到哪个图像像素最常出现在图像矩阵中。我不想使用for循环因为它需要花时间迭代图像的所有像素。
答案 0 :(得分:4)
设置一些测试数据。
> (image = matrix(sample(1:10, 100, replace = TRUE), nrow = 10))
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 4 4 2 7 2 2 3 8 2 5
[2,] 7 3 2 6 6 5 7 8 1 3
[3,] 7 5 7 9 4 9 4 8 2 7
[4,] 5 3 4 2 1 5 9 10 9 5
[5,] 9 10 7 2 7 4 9 1 1 9
[6,] 2 3 5 1 2 8 1 5 9 4
[7,] 5 4 10 5 9 10 1 6 1 10
[8,] 6 3 9 7 1 1 9 2 1 7
[9,] 5 9 4 8 9 9 5 10 5 4
[10,] 10 1 4 7 3 2 3 5 4 5
手动完成。
> table(image)
image
1 2 3 4 5 6 7 8 9 10
12 12 8 12 15 4 11 5 14 7
在这里我们可以看到值5最常出现(15次)。要以编程方式获得相同的结果:
> which.max(table(image))
5
5
答案 1 :(得分:1)
获取1行代码中的模式(或多数值)
使用set.seed生成相同的随机矩阵
> set.seed(123)
> image = matrix(sample(1:10, 100, replace = TRUE), nrow = 10)
> image
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 3 10 9 10 2 1 7 8 3 2
[2,] 8 5 7 10 5 5 1 7 7 7
[3,] 5 7 7 7 5 8 4 8 5 4
[4,] 9 6 10 8 4 2 3 1 8 7
[5,] 10 2 7 1 2 6 9 5 2 4
[6,] 1 9 8 5 2 3 5 3 5 2
[7,] 6 3 6 8 3 2 9 4 10 8
[8,] 9 1 6 3 5 8 9 7 9 1
[9,] 6 4 3 4 3 9 8 4 9 5
[10,] 5 10 2 3 9 4 5 2 2 6)
矩阵的模式值(如果平局,则给出最小的平局值)
> names(which.max(table(image)))
[1] "5"
答案 2 :(得分:0)
我不知道任何直接执行此操作的功能,但您可以使用以下功能:
sort(table(as.vector(Matrix))