【发布时间】:2014-04-23 11:23:58
【问题描述】:
我有一个包含 1,200 行和 500,000 列的列表。如何将其转换为 numpy 数组?
我已阅读 Bypass "Array is too big" python error 上的解决方案,但它们没有帮助。
我尝试将它们放入一个 numpy 数组中:
import random
import numpy as np
lol = [[random.uniform(0,1) for j in range(500000)] for i in range(1200)]
np.array(lol)
[错误]:
ValueError: array is too big.
那我试过pandas:
import random
import pandas as pd
lol = [[random.uniform(0,1) for j in range(500000)] for i in range(1200)]
pd.lib.to_object_array(lol).astype(float)
[错误]:
ValueError: array is too big.
我也按照@askewchan 的建议尝试了 hdf5:
import h5py
filearray = h5py.File('project.data','w')
data = filearray.create_dataset('tocluster',(len(data),len(data[0])),dtype='f')
data[...] = data
[错误]:
data[...] = data
File "/usr/lib/python2.7/dist-packages/h5py/_hl/dataset.py", line 367, in __setitem__
val = numpy.asarray(val, order='C')
File "/usr/local/lib/python2.7/dist-packages/numpy/core/numeric.py", line 460, in asarray
return array(a, dtype, copy=False, order=order)
File "/usr/lib/python2.7/dist-packages/h5py/_hl/dataset.py", line 455, in __array__
arr = numpy.empty(self.shape, dtype=self.dtype if dtype is None else dtype)
ValueError: array is too big.
这篇文章表明我可以在磁盘Python: how to store a numpy multidimensional array in PyTables? 中存储一个巨大的 numpy 数组。但我什至无法将我的列表列表放入一个 numpy 数组 =(
【问题讨论】:
-
当前列表(列表中的)如何存储?它是在磁盘上,还是在内存中计算?
-
在内存中计算。
-
无法重现,即使在 32 位系统上也不应该出现“数组太大”,因为数组并不太大。那么你使用的是什么 numpy 版本?你能用
lol = [[0] * 500000] * 1200; a = np.array(lol)重现它吗(测试时内存效率更高)? -
Nvm。如果您使用的是 32 位 numpy/python(忘记了项目大小因素),它只是 is 太大了。你应该升级,因为你显然可以使用大量的 RAM,系统很难真正是 32 位的?
-
np.zeros((500000, 1200))更简洁有效吗?
标签: python arrays numpy pandas pytables