有一个用于将数组分成块的How do you split a list into evenly sized chunks?。对于使用Numpy的巨型数组,有没有更有效的方法来做到这一点?
发布于 2013-01-19 03:56:10
从文档中:
>>> x = np.arange(8.0)
>>> np.array_split(x, 3)
[array([ 0., 1., 2.]), array([ 3., 4., 5.]), array([ 6., 7.])]
与numpy.split
相同,但如果组的长度不相等,则不会引发异常。
如果块数>len(数组),您将获得嵌套在其中的空数组,以解决这个问题-如果您的拆分数组保存在a
中,则可以通过以下方式删除空数组:
[x for x in a if x.size > 0]
如果您愿意,只需将其保存回a
即可。
发布于 2013-01-19 03:55:29
我相信如果区段的数量不需要正确划分数组的大小,那么您正在寻找的是numpy.split
,或者可能是numpy.array_split
。
发布于 2013-01-19 04:43:59
不完全是一个答案,而是一个很长的注释,与其他(正确)答案的代码格式很好。如果您尝试以下操作,您将看到您得到的是原始数组的视图,而不是副本,而您链接的问题中接受的答案并非如此。注意可能的副作用!
>>> x = np.arange(9.0)
>>> a,b,c = np.split(x, 3)
>>> a
array([ 0., 1., 2.])
>>> a[1] = 8
>>> a
array([ 0., 8., 2.])
>>> x
array([ 0., 8., 2., 3., 4., 5., 6., 7., 8.])
>>> def chunks(l, n):
... """ Yield successive n-sized chunks from l.
... """
... for i in xrange(0, len(l), n):
... yield l[i:i+n]
...
>>> l = range(9)
>>> a,b,c = chunks(l, 3)
>>> a
[0, 1, 2]
>>> a[1] = 8
>>> a
[0, 8, 2]
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8]
https://stackoverflow.com/questions/14406567
复制相似问题