我有一个大小为13000 * 300000的整数数组,值域在0到255之间。我想将它们的数据类型从整数更改为浮点数,就像数据是一个numpy数组一样:
data.astype('float')
在将数据类型从整数更改为浮点数时,出现了内存错误。我有80GB的RAM。它仍然显示内存错误。请问可能的原因是什么?
这里的问题在于数据非常庞大(大约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?了解更多技巧)。
hstack
之前,很可能需要先执行del data
以释放足够的内存。 - podshumok
data
大约有 30 GB,顺序存储在内存中。你需要另外 30 GB 的空间(同样是顺序存储)来存储结果。我相信这里的关键点是“顺序”。 - podshumok