代码之家  ›  专栏  ›  技术社区  ›  ValientProcess

每x个单元将numpy数组切片为多个数组

  •  0
  • ValientProcess  · 技术社区  · 7 年前

    例如,如果这是数组:

    [0, 2, 7, 9, 13]
    

    x=2

    因此,我希望获得以下数组:

    [0,2]
    [7,9]
    [13]
    

    我觉得有一种不使用循环的简单方法,但是我找不到。

    1 回复  |  直到 7 年前
        1
  •  1
  •   lightalchemist    7 年前
    import numpy as np
    A = np.asarray([0, 2, 7, 9, 13])    
    x = 2
    np.split(A, range(x, len(A), x))  
    # [array([0, 2]), array([7, 9]), array([13])]
    

    请注意,正如@Divakar在他的评论中提到的那样,在性能方面,最好使用循环(或者在本例中使用列表理解)。

    def f(seq, n):
        return [seq[i:min(i + n, len(seq))] for i in range(0, len(seq), n)]
    
    def g(seq, n):
        return np.split(seq, range(n, len(A), n))
    
    %timeit f(range(12345), 109)
    65.2µs ± 468ns (mean +- std. dev. of 7 runs, 10000 loops each)
    
    %timeit g(range(12345), 109)
    1.32ms ± 5.21 µs (mean +- std. dev. of 7 runs, 10000 loops each)
    

    编辑

    由于切片超过最后一个索引将自然切片到最后一个元素,我们可以取消检查

    def f(seq, n):
        return [seq[i : i + n] for i in range(0, len(seq), n)]