创建布尔NumPy数组时的内存错误(MemoryError)(Python)

时间:2010-09-15 12:08:31

标签: python numpy

我在Python 2.6.2中使用NumPy。我正在尝试创建一个小的(长度为3),简单的布尔数组。以下给出了一个MemoryError,我认为它不应该。

import numpy as np
cond = np.fromiter((x in [2] for x in [0, 1, 2]), dtype = np.bool)

它给我的错误是:

MemoryError:无法分配数组内存

但是,以下获取列表的方法(与ndarray相对)工作正常(不使用numpy):

cond = list((x in [2] for x in [0, 1, 2]))

我在Numpy代码中做错了什么?我的感觉是它应该有用。

2 个答案:

答案 0 :(得分:1)

你不应该有任何错误。

使用Python 2.6.5或Python 2.7和Numpy 1.5.0,我没有收到任何错误。因此,我认为更新您的软件可以很好地解决您观察到的问题。

答案 1 :(得分:1)

我可以用numpy 1.1重现这个问题(但不能用更新的东西)。显然,升级到更新版本的numpy是最好的选择。

但是,它似乎与np.boolcount=-1时使用dtype有关(默认值:读取迭代器中的所有项目,而不是设置数字)。

快速解决方法是将其创建为int数组,然后将其转换为布尔数组:

cond = np.fromiter((x in [2] for x in [0, 1, 2]), dtype=np.int).astype(np.bool)

另一种方法是将其转换为列表,然后将count设置为列表的长度(或者只使用列表中的np.asarray):

items = list((x in [2] for x in [0, 1, 2]))
cond = np.fromiter(items, dtype=np.bool, count=len(items))

显然,这两个都不是最理想的,但是如果你不能升级到更新版本的numpy,它们就可以工作了。