很抱歉,我不知道正确的术语,因此“垂直蠕虫”基本上我希望数字从左下角开始,当它向上添加列时,下一列的最低数字在顶部,当它向下添加时。例如:
[2, 3, 8
1, 4, 7
0, 5, 6]
到目前为止,我提出了一个非常臃肿的代码,基本上是生成一列,然后复制它,翻转它,将最后一列的最大值加上1,然后hstack将它们放在一起,例如:
第一列
[2,
1,
0,]
翻转它:
[0,
1,
2,]
将最后一个的最大值加上1(本例中为3):
[3,
4,
5,]
hs锁定它们:
[2, 3
1, 4
0, 5]
然后,我只需对任意多个列重复此操作。为了加快速度,如果我想要4,我可以只采取最后的hstack和复制两列和添加最大值。不需要翻转,因为它包含偶数列。你知道吗
我需要的矩阵有252个12乘21的矩阵。这是我目前掌握的代码:
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]])
有没有一种我看不到或不知道的超级简单的方法?你知道吗
可以transpose数组和flip vertically每秒钟一列:
当然还有一个horizontal version of this flip function。你知道吗
当然,你可以用切片的方法。使用换位来垂直填充数组,而不是水平填充,然后使用切片来反转偶数列的方向。你知道吗
输出
相关问题 更多 >
编程相关推荐