假设我有一些矩阵R
v1 <- c(1, .8, 0, .1, .2)
v2 <- c(.8, 1, .4, 0, .9)
v3 <- c(0, .4, 1, 0, 0)
v4 <- c(.1, 0, 0, 1, .5)
v5 <- c(.2, .9, 0, .5, 1)
R <- matrix(data=c(v1,v2,v3,v4,v5), nrow=5, byrow=TRUE)
我想使用最小-最大函数将值分配给不同的矩阵,R2
:
R2 <- matrix(NA, nrow=5, ncol=5)
for(i in 1:nrow(R))
{
for(j in 1:ncol(R))
{
R2[i,j] <- max(min(R[i,1],R[1,j]), min(R[i,2],R[2,j]), min(R[i,3],R[3,j]), min(R[i,4],R[4,j]), min(R[i,5],R[5,j]))
}
}
这工作正常,但当矩阵大小发生变化时,我必须修改R2
分配。如何将最小-最大函数推广到任何大小的矩阵?例如,我想要一个像这样的函数调用:
# to work, nrow(M1) == ncol(M2)
map_relation <- function(M1, M2)
{
result <- matrix(NA, nrow=nrow(M1), ncol=ncol(M2))
for(i in 1:nrow(M1))
{
max_val <- 0
for(j in 1:ncol(M2))
{
# HOW CAN i MODIFY THIS TO APPLY GENERALLY TO ANY SIZED MATRIX?
result[i,j] <- max(min(M1[i,1],M2[1,j]), min(M1[i,2],M2[2,j]), min(M1[i,3],M2[3,j]), min(M1[i,4],M2[4,j]), min(M1[i,5],M2[5,j]))
}
}
return(result)
}
最佳答案
看来你有一个对称矩阵。任何人执行此操作的一种方法是:
R3 <- matrix(NA, nrow=5, ncol=5)
for(i in 1:nrow(R)) {
for(j in 1:ncol(R)){
R3[i,j] <- max(pmin(R[i, ],R[,j]))
}
}
您还可以使用apply
。由于矩阵是对称的,因此您可以使用 MARGIN = 2
或 MARGIN = 1
R4 <- apply(R, 2, \(x)apply(R, 1, \(y) max(pmin(x,y))))
all.equal(R3, R2)
[1] TRUE
关于r - 推广任意大小矩阵的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76915672/