Python: 在将数据类型从整数更改为浮点数时出现内存错误

4

我有一个大小为13000 * 300000的整数数组,值域在0到255之间。我想将它们的数据类型从整数更改为浮点数,就像数据是一个numpy数组一样:

 data.astype('float')

在将数据类型从整数更改为浮点数时,出现了内存错误。我有80GB的RAM。它仍然显示内存错误。请问可能的原因是什么?


可能是如何在Python中分析内存使用情况?的重复问题。 - ivan_pozdeev
1
你的 data 大约有 30 GB,顺序存储在内存中。你需要另外 30 GB 的空间(同样是顺序存储)来存储结果。我相信这里的关键点是“顺序”。 - podshumok
它的真实数据是按顺序排列的。 - thetna
1个回答

9

这里的问题在于数据非常庞大(大约30GB的顺序数据,参见numpy数组中有多少内存?),因此在尝试将其装入内存时会导致错误。不要一次性对整个数据进行操作,而是先将其切片,然后进行操作,最后再合并,例如:

n = 300000
d1 = data[:, :n/2].astype('float')
d2 = data[:, n/2:].astype('float')

data = np.hstack(d1, d2)

一般来说,由于您的数据量非常庞大,考虑分批处理以避免经常遇到这类问题 (参见Techniques for working with large Numpy arrays?了解更多技巧)。


3
在使用hstack之前,很可能需要先执行del data以释放足够的内存。 - podshumok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接