如何将numpy数组分成更小的块/批,然后遍历它们

假设我有这个numpy数组

[[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
[10, 11, 12]]

我想分两批拆分,然后迭代:

[[1, 2, 3],      Batch 1
[4, 5, 6]]

[[7, 8, 9],      Batch 2
[10, 11, 12]]

最简单的方法是什么?

编辑:我很抱歉我错过了这样的信息:一旦我打算继续进行迭代,原始数组将因为拆分和迭代批量而被销毁.批量迭代完成后,我需要从第一批再次重新启动,因此我应该保留原始数组不会被销毁.整个想法是与需要迭代批量的随机梯度下降算法一致.在一个典型的例子中,我可以进行100000次迭代For循环,只需要一次又一次地重放1000次.

最佳答案
考虑数组a

a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9],
              [10, 11, 12]])

选项1
使用重塑和//

a.reshape(a.shape[0] // 2, -1, a.shape[1])

array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

选项2
如果你想要两个小组而不是两个小组

a.reshape(-1, 2, a.shape[1])

array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

选项3
使用发电机

def get_every_n(a, n=2):
    for i in range(a.shape[0] // 2):
        yield a[2*i:2*(i+1)]

for sa in get_every_n(a):
    print sa

[[1 2 3]
 [4 5 6]]
[[ 7  8  9]
 [10 11 12]]

转载注明原文:如何将numpy数组分成更小的块/批,然后遍历它们 - 代码日志