我在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代码中做错了什么?我的感觉是它应该有用。
答案 0 :(得分:1)
你不应该有任何错误。
使用Python 2.6.5或Python 2.7和Numpy 1.5.0,我没有收到任何错误。因此,我认为更新您的软件可以很好地解决您观察到的问题。
答案 1 :(得分:1)
我可以用numpy 1.1重现这个问题(但不能用更新的东西)。显然,升级到更新版本的numpy是最好的选择。
但是,它似乎与np.bool
在count=-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,它们就可以工作了。