作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个包含 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.
这篇文章表明我可以在磁盘中存储一个巨大的 numpy 数组 Python: how to store a numpy multidimensional array in PyTables? .但我什至无法将列表列表放入 numpy 数组 =(
最佳答案
在具有 32GB RAM 和 64 位 Python 的系统上,您的代码:
import random
import numpy as np
lol = [[random.uniform(0,1) for j in range(500000)] for i in range(1200)]
np.array(lol)
对我来说效果很好,但它可能不是最好的选择。就是这种东西PyTables是为。由于您处理的是同类数据,因此可以使用 Array 类,或者更好的是 CArray class (支持压缩)。这可以按如下方式完成:
import numpy as np
import tables as pt
# Create container
h5 = pt.open_file('myarray.h5', 'w')
filters = pt.Filters(complevel=6, complib='blosc')
carr = h5.create_carray('/', 'carray', atom=pt.Float32Atom(), shape=(1200, 500000), filters=filters)
# Fill the array
m, n = carr.shape
for j in xrange(m):
carr[j,:] = np.random.randn(n)
h5.close() # "myarray.h5" (~2.2 GB)
# Open file
h5 = pt.open_file('myarray.h5', 'r')
carr = h5.root.carray
# Display some numbers from array
print carr[973:975, :4]
print carr.dtype
如果您打印carr.flavor
,它将返回'numpy'
。您可以像使用 NumPy 数组一样使用此 carr
。信息存储在磁盘上,但仍然非常快。
关于python - 如何从一个大列表中创建一个 Numpy 数组- python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22468202/
我是一名优秀的程序员,十分优秀!