【发布时间】:2015-05-12 08:34:51
【问题描述】:
我有一个由许多列组成的大型矩阵。我想通过平均每个附近的 2 列(例如第 1 列有 2,第 3 列有 4 等)来获得一个具有相同行数和一半列数的新矩阵。 现在我正在使用 for 循环,但我想知道是否有更聪明的方法来实现这一点。
【问题讨论】:
我有一个由许多列组成的大型矩阵。我想通过平均每个附近的 2 列(例如第 1 列有 2,第 3 列有 4 等)来获得一个具有相同行数和一半列数的新矩阵。 现在我正在使用 for 循环,但我想知道是否有更聪明的方法来实现这一点。
【问题讨论】:
这是一个矢量化的解决方案:
m <- matrix(1:96,8);
m;
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
## [1,] 1 9 17 25 33 41 49 57 65 73 81 89
## [2,] 2 10 18 26 34 42 50 58 66 74 82 90
## [3,] 3 11 19 27 35 43 51 59 67 75 83 91
## [4,] 4 12 20 28 36 44 52 60 68 76 84 92
## [5,] 5 13 21 29 37 45 53 61 69 77 85 93
## [6,] 6 14 22 30 38 46 54 62 70 78 86 94
## [7,] 7 15 23 31 39 47 55 63 71 79 87 95
## [8,] 8 16 24 32 40 48 56 64 72 80 88 96
(m[,seq(1,ncol(m),2)]+m[,seq(2,ncol(m),2)])/2;
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 5 21 37 53 69 85
## [2,] 6 22 38 54 70 86
## [3,] 7 23 39 55 71 87
## [4,] 8 24 40 56 72 88
## [5,] 9 25 41 57 73 89
## [6,] 10 26 42 58 74 90
## [7,] 11 27 43 59 75 91
## [8,] 12 28 44 60 76 92
【讨论】:
(m[,c(TRUE, FALSE)] + m[,c(FALSE, TRUE)])/2怎么样
(df[c(TRUE, FALSE)] + df[c(FALSE, TRUE)])/2