2012-12-17 42 views
3

我有对象d连接到H5数据集:内存错误而切片阵列

>>> data = d[:, :, 0].astype(np.float32) 
>>> data.shape 
(17201, 10801) 
>>> data[data==-32768] = data[data>0].min() 
Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
MemoryError 

我可以做一些其他的切片办法来避免这个错误?

+0

购买更多的内存? ;) – wim

+0

你想用最后一行来实现什么?左侧评估为负数值-32768的数组,而右侧数组中的最小正数。结果因此将是一个False值的数组(由于numpy广播,长度将是数组中的-32768个值)。也许还有另一种实现你的目标的方式? –

+0

@David:我将所有等于-32768的值标准化为数组的最小值大于0.如果它不明显... – theta

回答

2

好吧,我自己写答案,因为有可接受的解决方案,在@mgilson提出问题后获得数据类型。

如果数据允许,可以通过在阵列上操作时使用更简单的数据类型来避免内存错误。考虑到最初的问题这个工作对我来说:

>>> data = d[:, :, 0].astype(np.short) 
>>> data[data==-32768] = data[data>0].min() 
>>> data = data.astype(np.float32)