这种情况是我想采用以下Python / NumPy代码:
# Procure some data:
z = np.zeros((32,32))
chunks = []
for i in range(0,32,step):
for j in range(0,32,step):
chunks.append( z[i:i+step,j:j+step] )
chunks = np.array(chunks)
chunks.shape # (256, 2, 2)
对其向量化/删除for循环。这可能吗?我不太介意最终数组的排序,例如256,2,2与2,2,256,只要空间结构保持不变。也就是说,距离原始数组2x2的块。
也许除了常规索引编制之外还使用::
做一些魔术可以做到这一点?这里有NumPy大师吗?
答案 0 :(得分:2)
您可能需要transpose
:
a = np.arange(1024).reshape(32,32)
a.reshape(16,2,16,2).transpose((0,2,1,3)).reshape(-1,2,2)
输出:
array([[[ 0, 1],
[ 32, 33]],
[[ 2, 3],
[ 34, 35]],
[[ 4, 5],
[ 36, 37]],
...,
[[ 986, 987],
[1018, 1019]],
[[ 988, 989],
[1020, 1021]],
[[ 990, 991],
[1022, 1023]]])