【问题标题】:Get the maximum of the positions that are symmetric diagonally获取对角线对称位置的最大值
【发布时间】:2020-09-26 03:27:41
【问题描述】:

我有一个像 list1 这样的矩阵。我想在对角线对称的两个位置上得到最大值,然后得到新的矩阵 (list2)。如何运行 R 或 Excel? 列表1

    A   B   C   D
A   11  9   11  11
B   4   3   4   4
C   14  8   15  12
D   9   6   9   8

列表2

    A   B   C   D
A   11  9   14  11
B   9   3   8   6
C   14  8   15  12
D   11  6   12  8

【问题讨论】:

  • 非常感谢您的回答。我现在要研究它
  • 请随意accept one of the answer,点击左侧的复选标记对您最有效 :-) 每个帖子只能接受一个答案。

标签: r excel matrix diagonal


【解决方案1】:

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

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

【讨论】:

  • 太棒了!~谢谢你的代码,为我节省了很多时间~~
【解决方案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"))
)

然后你可以写一个函数来比较对称矩阵的位置

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

【讨论】:

  • 感谢您的回答。对我帮助很大~~
【解决方案3】:

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

=IF(A1:D4>TRANSPOSE(A1:D4),A1:D4,TRANSPOSE(A1:D4))

在旧版本的 Excel 中必须使用 CtrlShiftEnter 输入。

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

适用于数组和范围。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多