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