gpt4 book ai didi

r - 如何重新排列矩阵?

转载 作者:行者123 更新时间:2023-12-04 09:33:18 25 4
gpt4 key购买 nike

我需要创建一个函数,它将根据矩阵中的值重新排列任何方阵。

所以如果我有这样的矩阵:

M <- matrix(1:16, ncol = 4)
M
#> [,1] [,2] [,3] [,4]
#> [1,] 1 5 9 13
#> [2,] 2 6 10 14
#> [3,] 3 7 11 15
#> [4,] 4 8 12 16

重新排列后,它需要如下所示:
      [,1] [,2] [,3] [,4]
[1,] 1 3 6 10
[2,] 2 5 9 13
[3,] 4 8 12 15
[4,] 7 11 14 16

所以它是从最低(左上角)到最高(右下角)排序的,但数字是按对角线排序的(这是正确的词吗?)而不是按行或列排序。

我知道如何“手动”执行此操作,但我无法弄清楚此重新排列所依据的任何规则。

最佳答案

1) row(m) + col(m)沿反向对角线是常数,所以:

M <- replace(m, order(row(m) + col(m)), m)

给:
> M
[,1] [,2] [,3] [,4]
[1,] 1 3 6 10
[2,] 2 5 9 13
[3,] 4 8 12 15
[4,] 7 11 14 16

不清楚在对角线上排序是否意味着它们从存储顺序解散到反向对角线上,或者它们实际上在每个反向对角线内排序。在问题的例子中,两种解释给出了相同的答案;但是,如果您确实希望之后使用不同的数据在反向对角线内对结果进行排序,则应用此:
ave(M, row(M) + col(M), FUN = sort)

2) 更长的版本:
M2 <- matrix(m[order(unlist(tapply(seq_along(m), row(m) + col(m), c)))], nrow(m))

关于r - 如何重新排列矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59344660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com