我正在 R 中工作,我有一个尺寸为 6n x 6n 的矩阵。我想用零替换 6x6 块对角矩阵中的所有元素。有什么建议么?
例如(仅报告 12x12 样本)
# create a sample 12x12 matrix
> mat <- matrix(1:144, nrow=12, ncol=12)
> mat
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,] 1 13 25 37 49 61 73 85 97 109 121 133
[2,] 2 14 26 38 50 62 74 86 98 110 122 134
[3,] 3 15 27 39 51 63 75 87 99 111 123 135
[4,] 4 16 28 40 52 64 76 88 100 112 124 136
[5,] 5 17 29 41 53 65 77 89 101 113 125 137
[6,] 6 18 30 42 54 66 78 90 102 114 126 138
[7,] 7 19 31 43 55 67 79 91 103 115 127 139
[8,] 8 20 32 44 56 68 80 92 104 116 128 140
[9,] 9 21 33 45 57 69 81 93 105 117 129 141
[10,] 10 22 34 46 58 70 82 94 106 118 130 142
[11,] 11 23 35 47 59 71 83 95 107 119 131 143
[12,] 12 24 36 48 60 72 84 96 108 120 132 144
Run Code Online (Sandbox Code Playgroud)
我想获得的是
new_mat
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,] 1 13 25 37 49 61 0 0 0 0 0 0
[2,] 2 14 26 38 50 62 0 0 0 0 0 0
[3,] 3 15 27 39 51 63 0 0 0 0 0 0
[4,] 4 16 28 40 52 64 0 0 0 0 0 0
[5,] 5 17 29 41 53 65 0 0 0 0 0 0
[6,] 6 18 30 42 54 66 0 0 0 0 0 0
[7,] 0 0 0 0 0 0 79 91 103 115 127 139
[8,] 0 0 0 0 0 0 80 92 104 116 128 140
[9,] 0 0 0 0 0 0 81 93 105 117 129 141
[10,] 0 0 0 0 0 0 82 94 106 118 130 142
[11,] 0 0 0 0 0 0 83 95 107 119 131 143
[12,] 0 0 0 0 0 0 84 96 108 120 132 144
Run Code Online (Sandbox Code Playgroud)
取单位矩阵和全 1 矩阵的克罗内克乘积,然后将 mat 乘以该乘积。
mat * (diag(nrow(mat) / 6) %x% matrix(1, 6, 6))
Run Code Online (Sandbox Code Playgroud)
给予:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,] 1 13 25 37 49 61 0 0 0 0 0 0
[2,] 2 14 26 38 50 62 0 0 0 0 0 0
[3,] 3 15 27 39 51 63 0 0 0 0 0 0
[4,] 4 16 28 40 52 64 0 0 0 0 0 0
[5,] 5 17 29 41 53 65 0 0 0 0 0 0
[6,] 6 18 30 42 54 66 0 0 0 0 0 0
[7,] 0 0 0 0 0 0 79 91 103 115 127 139
[8,] 0 0 0 0 0 0 80 92 104 116 128 140
[9,] 0 0 0 0 0 0 81 93 105 117 129 141
[10,] 0 0 0 0 0 0 82 94 106 118 130 142
[11,] 0 0 0 0 0 0 83 95 107 119 131 143
[12,] 0 0 0 0 0 0 84 96 108 120 132 144
Run Code Online (Sandbox Code Playgroud)