gpt4 book ai didi

python - 如何从一个大列表中创建一个 Numpy 数组- python

转载 作者:太空狗 更新时间:2023-10-30 01:08:23 26 4
gpt4 key购买 nike

我有一个包含 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com