Whu*_*hud 4 python numpy python-3.x
对不起,我不知道正确的术语,因此'垂直蠕虫'基本上我希望数字从左下角开始,当它上升到它添加的列时,然后下一列的最低数字在顶部和随着它的下降而增加.例如:
[2, 3, 8
1, 4, 7
0, 5, 6]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我想出了这个非常膨胀的代码,它基本上使一个列然后复制它,翻转它,添加最后一列的最大值加1,然后hstack将它们放在一起,例如:
第一栏
[2,
1,
0,]
Run Code Online (Sandbox Code Playgroud)
翻转:
[0,
1,
2,]
Run Code Online (Sandbox Code Playgroud)
添加最后一个加1的最大值(在这种情况下为3):
[3,
4,
5,]
Run Code Online (Sandbox Code Playgroud)
他们:
[2, 3
1, 4
0, 5]
Run Code Online (Sandbox Code Playgroud)
然后,我只是重复这个我想要的列数.加快速度,如果我想要4我可以采取最后的hstack并复制两列并添加最大值.不需要翻转,因为它的列数是偶数.
我需要的矩阵在12乘21矩阵中有252个项目.这是我到目前为止的代码:
import numpy as np
a = np.arange(20,-1,-1).reshape(21,1)
b = a+1 + a[::-1]*2
c = b+1 + a*2
d = np.hstack((a,b,c))
e = np.hstack((d,np.flip(d,0)+ d.shape[0] * d.shape[1]))
f = np.hstack((e,e + e.shape[0] * e.shape[1]))
del a,b,c,d,e
>>> f
array([[ 20, 21, 62, 63, 104, 105, 146, 147, 188, 189, 230, 231],
[ 19, 22, 61, 64, 103, 106, 145, 148, 187, 190, 229, 232],
[ 18, 23, 60, 65, 102, 107, 144, 149, 186, 191, 228, 233],
[ 17, 24, 59, 66, 101, 108, 143, 150, 185, 192, 227, 234],
[ 16, 25, 58, 67, 100, 109, 142, 151, 184, 193, 226, 235],
[ 15, 26, 57, 68, 99, 110, 141, 152, 183, 194, 225, 236],
[ 14, 27, 56, 69, 98, 111, 140, 153, 182, 195, 224, 237],
[ 13, 28, 55, 70, 97, 112, 139, 154, 181, 196, 223, 238],
[ 12, 29, 54, 71, 96, 113, 138, 155, 180, 197, 222, 239],
[ 11, 30, 53, 72, 95, 114, 137, 156, 179, 198, 221, 240],
[ 10, 31, 52, 73, 94, 115, 136, 157, 178, 199, 220, 241],
[ 9, 32, 51, 74, 93, 116, 135, 158, 177, 200, 219, 242],
[ 8, 33, 50, 75, 92, 117, 134, 159, 176, 201, 218, 243],
[ 7, 34, 49, 76, 91, 118, 133, 160, 175, 202, 217, 244],
[ 6, 35, 48, 77, 90, 119, 132, 161, 174, 203, 216, 245],
[ 5, 36, 47, 78, 89, 120, 131, 162, 173, 204, 215, 246],
[ 4, 37, 46, 79, 88, 121, 130, 163, 172, 205, 214, 247],
[ 3, 38, 45, 80, 87, 122, 129, 164, 171, 206, 213, 248],
[ 2, 39, 44, 81, 86, 123, 128, 165, 170, 207, 212, 249],
[ 1, 40, 43, 82, 85, 124, 127, 166, 169, 208, 211, 250],
[ 0, 41, 42, 83, 84, 125, 126, 167, 168, 209, 210, 251]])
Run Code Online (Sandbox Code Playgroud)
有没有一种超级简单的方法可以做到这一点,我没有看到或者不知道?
当然,你可以用切片来做到这一点.使用移调来垂直填充数组而不是水平填充数组,然后使用切片来反转偶数列的方向.
import numpy as np
rows, cols = 21, 12
a = np.arange(rows * cols).reshape(cols, rows).transpose()
b = np.arange(0, cols, 2)
a[:, b] = a[::-1, b]
print(a)
Run Code Online (Sandbox Code Playgroud)
产量
[[ 20 21 62 63 104 105 146 147 188 189 230 231]
[ 19 22 61 64 103 106 145 148 187 190 229 232]
[ 18 23 60 65 102 107 144 149 186 191 228 233]
[ 17 24 59 66 101 108 143 150 185 192 227 234]
[ 16 25 58 67 100 109 142 151 184 193 226 235]
[ 15 26 57 68 99 110 141 152 183 194 225 236]
[ 14 27 56 69 98 111 140 153 182 195 224 237]
[ 13 28 55 70 97 112 139 154 181 196 223 238]
[ 12 29 54 71 96 113 138 155 180 197 222 239]
[ 11 30 53 72 95 114 137 156 179 198 221 240]
[ 10 31 52 73 94 115 136 157 178 199 220 241]
[ 9 32 51 74 93 116 135 158 177 200 219 242]
[ 8 33 50 75 92 117 134 159 176 201 218 243]
[ 7 34 49 76 91 118 133 160 175 202 217 244]
[ 6 35 48 77 90 119 132 161 174 203 216 245]
[ 5 36 47 78 89 120 131 162 173 204 215 246]
[ 4 37 46 79 88 121 130 163 172 205 214 247]
[ 3 38 45 80 87 122 129 164 171 206 213 248]
[ 2 39 44 81 86 123 128 165 170 207 212 249]
[ 1 40 43 82 85 124 127 166 169 208 211 250]
[ 0 41 42 83 84 125 126 167 168 209 210 251]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63 次 |
| 最近记录: |