Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 获取对角对称位置的最大值_R_Excel_Matrix_Diagonal - Fatal编程技术网

R 获取对角对称位置的最大值

R 获取对角对称位置的最大值,r,excel,matrix,diagonal,R,Excel,Matrix,Diagonal,我有一个类似于列表1的矩阵。我想得到对角对称的两个位置的最大值,然后得到新的矩阵List2。如何运行R或Excel? 清单1 清单2 在R中,如果你有矩阵 mm <- matrix( c(11L, 4L, 14L, 9L, 9L, 3L, 8L, 6L, 11L, 4L, 15L, 9L, 11L, 4L, 12L, 8L), nrow=4, dimnames = list(c("A", "B", "C", "

我有一个类似于列表1的矩阵。我想得到对角对称的两个位置的最大值,然后得到新的矩阵List2。如何运行R或Excel? 清单1

清单2


在R中,如果你有矩阵

mm <- matrix(
  c(11L, 4L, 14L, 9L, 9L, 3L, 8L, 6L, 11L, 4L, 15L, 9L, 11L, 4L, 12L, 8L), 
  nrow=4, dimnames = list(c("A", "B", "C", "D"), c("A", "B", "C", "D"))
)
然后,您可以编写一个函数来比较symmetrix的位置

max_sym_pos <- function(m) {
  vupper <- m[upper.tri(m)]
  vlower <- m[lower.tri(m)]
  vmax <- pmax(vupper, vlower)
  m[upper.tri(m)] <- vmax
  m[lower.tri(m)] <- vmax
  m
}
max_sym_pos(mm)
#    A  B  C  D
# A 11  9 14 11
# B  9  3  9  6
# C 14 11 15 12
# D  9  6 12  8

在R中,如果你有矩阵

mm <- matrix(
  c(11L, 4L, 14L, 9L, 9L, 3L, 8L, 6L, 11L, 4L, 15L, 9L, 11L, 4L, 12L, 8L), 
  nrow=4, dimnames = list(c("A", "B", "C", "D"), c("A", "B", "C", "D"))
)
然后,您可以编写一个函数来比较symmetrix的位置

max_sym_pos <- function(m) {
  vupper <- m[upper.tri(m)]
  vlower <- m[lower.tri(m)]
  vmax <- pmax(vupper, vlower)
  m[upper.tri(m)] <- vmax
  m[lower.tri(m)] <- vmax
  m
}
max_sym_pos(mm)
#    A  B  C  D
# A 11  9 14 11
# B  9  3  9  6
# C 14 11 15 12
# D  9  6 12  8

可以取矩阵和转置矩阵的平行最大值:

pmax(M, t(M))

     [,1] [,2] [,3] [,4]
[1,]   11    9   14   11
[2,]    9    3    8    6
[3,]   14    8   15   12
[4,]   11    6   12    8

可以取矩阵和转置矩阵的平行最大值:

pmax(M, t(M))

     [,1] [,2] [,3] [,4]
[1,]   11    9   14   11
[2,]    9    3    8    6
[3,]   14    8   15   12
[4,]   11    6   12    8

在Excel中,以下数组公式执行相同的操作:

=IF(A1:D4>TRANSPOSE(A1:D4),A1:D4,TRANSPOSE(A1:D4))
必须在旧版本的Excel中使用CtrlShift输入

在Excel 2019中,在输入公式之前,我必须选择G1到J4。在O365中,这是使用新的溢出公式自动进行的


适用于数组和范围。

在Excel中,以下数组公式也适用于此:

=IF(A1:D4>TRANSPOSE(A1:D4),A1:D4,TRANSPOSE(A1:D4))
必须在旧版本的Excel中使用CtrlShift输入

在Excel 2019中,在输入公式之前,我必须选择G1到J4。在O365中,这是使用新的溢出公式自动进行的


适用于阵列和范围。

非常感谢您的回答。我现在就要学习了。点击左边的复选标记,你可以自由选择最适合你的答案:-每篇文章只能接受一个答案。非常感谢你的回答。我现在就要学习了。点击左边的复选标记,你可以自由选择最适合你的答案:-每篇文章只能接受一个答案。太棒了~谢谢你的代码,节省了我很多时间~~太棒了~谢谢你的代码,节省了我很多时间~~谢谢你的回答。这对我帮助很大~~谢谢你的回答。这对我帮助很大~~谢谢你的回答。这对我帮助很大谢谢你的回答。这对我帮助很大^_^