Numpy组重塑/索引

时间:2020-07-10 22:17:18

标签: python numpy

这种情况是我想采用以下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大师吗?

1 个答案:

答案 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]]])