首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Numpy将数组划分为N个块

使用Numpy将数组划分为N个块
EN

Stack Overflow用户
提问于 2013-01-19 03:50:28
回答 5查看 137.5K关注 0票数 82

有一个用于将数组分成块的How do you split a list into evenly sized chunks?。对于使用Numpy的巨型数组,有没有更有效的方法来做到这一点?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-19 03:56:10

试试numpy.array_split

从文档中:

代码语言:javascript
复制
>>> 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中,则可以通过以下方式删除空数组:

代码语言:javascript
复制
[x for x in a if x.size > 0]

如果您愿意,只需将其保存回a即可。

票数 126
EN

Stack Overflow用户

发布于 2013-01-19 03:55:29

我相信如果区段的数量不需要正确划分数组的大小,那么您正在寻找的是numpy.split,或者可能是numpy.array_split

票数 9
EN

Stack Overflow用户

发布于 2013-01-19 04:43:59

不完全是一个答案,而是一个很长的注释,与其他(正确)答案的代码格式很好。如果您尝试以下操作,您将看到您得到的是原始数组的视图,而不是副本,而您链接的问题中接受的答案并非如此。注意可能的副作用!

代码语言:javascript
复制
>>> 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]
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14406567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档