【问题标题】:Different threshold values in a matrix矩阵中的不同阈值
【发布时间】:2014-09-03 15:15:51
【问题描述】:

我有两个矩阵。在 matrix1 中只有值 0 和 255。另一个矩阵有不同的值。

vec1 <- c(255,0,0,0,255,0,0,255,255,0)
vec2 <- c(0,255,0,255,0,0,255,255,0,0)
vec3 <- c(112,68,235,147,89,56,245,7,119,76)
vec4 <- c(194,158,13,41,182,218,5,78,195,235)

matrix1 <- matrix(c(vec1,vec2,vec1,vec2),10)
matrix2 <- matrix(c(vec3,vec4,vec3,vec4),10)

现在我想为 matrix2 定义一个阈值,这样也只有 值 0 和 255。

matrix2[matrix2 > 150] <- 255
matrix2[matrix2 <= 150] <- 0

然后我想从两个矩阵中获得技能分数。 这些是一个阈值,但我想要技能分数 对于所有阈值(从 0 到 255)。

a <- length(which(matrix1 == 255 & matrix2 == 255))
b <- length(which(matrix1 == 0 & matrix2 == 255))
c <- length(which(matrix1 == 255 & matrix2 == 0))
d <- length(which(matrix1 == 0 & matrix2 == 0))

KSS <- ((a*d)-(b*c))/((a+c)*(b+d))

我用 for 循环试过了,但没用。

for (i in c(1:255)) {
  matrix2[matrix2 >i] <-255
  matrix2[matrix2 <= i] <-0
}

感谢您的帮助!

【问题讨论】:

    标签: r for-loop matrix


    【解决方案1】:

    对于您的阈值矩阵,请使用以下构造:

    (matrix2>50)*100
          [,1] [,2] [,3] [,4]
     [1,]    0  100    0  100
     [2,]  100  100  100  100
     [3,]    0    0    0    0
     [4,]    0    0    0    0
     [5,]  100  100  100  100
     [6,]  100    0  100    0
     [7,]    0    0    0    0
     [8,]    0  100    0  100
     [9,]    0  100    0  100
    [10,]  100    0  100    0
    

    对于 a、b、c 和 d,您可以简化为(根本不需要其他阈值矩阵):

    a <- sum(!!matrix1 & !!(matrix2>50))
    b <- sum(!matrix1 & !!(matrix2>50))
    c <- sum(!!matrix1 & !(matrix2>50))
    d <- sum(!matrix1 & !(matrix2>50))
    

    【讨论】:

    • 感谢您的帮助,但是当我的值从 0 变为 255 时,我该怎么办?
    【解决方案2】:

    真正的问题是您每次都在循环中更改matrix2 的值,因此在第一个循环之后,所有值都是 0 或 100,因此不同的阈值无关紧要。这样的事情怎么样。首先,我们可以定义一个KSS 函数,该函数接受两个矩阵,将它们转换为 2x2 表并计算 KSS 值。

    KSS <- function(a,b) {
        x <- table(factor(a, levels=c(0,100)), factor(b, levels=c(0,100)))
        ((x[2,2]*x[1,1])-(x[1,2]*x[2,1]))/((x[2,2]+x[2,1])*(x[1,2]+x[1,1]))
    }
    

    那你就可以了

    kss.val <- sapply(1:100, function(thresh) {
        KSS(matrix1, (matrix2 > thresh) * 100)
    })
    

    获取每个阈值的 KSS 值。然后你可以根据需要绘制结果

    plot(1:100, kss.val)
    

    【讨论】:

    • 谢谢!但我犯了一个错误..矩阵的值从 0 到 255
    猜你喜欢
    • 2018-09-24
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2020-02-04
    • 2018-06-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多