Python 如何使用生成器提供的所有样本的某些特定元素保存numpy数组?
假设我有一个生成元组x,y的生成器。 我只想保存从这个生成器生成的所有x元素。 但是,我想使用.npy文件来实现这一点 我知道如果我的生成器每次迭代只生成一个元素,比如z,我可以使用下面的代码将这个元素保存在numpy数组文件中Python 如何使用生成器提供的所有样本的某些特定元素保存numpy数组?,python,python-3.x,numpy,generator,Python,Python 3.x,Numpy,Generator,假设我有一个生成元组x,y的生成器。 我只想保存从这个生成器生成的所有x元素。 但是,我想使用.npy文件来实现这一点 我知道如果我的生成器每次迭代只生成一个元素,比如z,我可以使用下面的代码将这个元素保存在numpy数组文件中 numpy.save('array.npy', numpy.stack(generator)) 但是,我不知道如何修改这条线来解决我的问题。我的意思是,我认为不可能用这个 你能帮我吗?我非常感谢您的帮助:) 谢谢大家! 发电机: In [406]: g = ((i,i
numpy.save('array.npy', numpy.stack(generator))
但是,我不知道如何修改这条线来解决我的问题。我的意思是,我认为不可能用这个
你能帮我吗?我非常感谢您的帮助:)
谢谢大家! 发电机:
In [406]: g = ((i,i+10) for i in range(5))
In [414]: g = ((i,i+10) for i in range(5))
In [415]: np.array(list(g))
Out[415]:
array([[ 0, 10],
[ 1, 11],
[ 2, 12],
[ 3, 13],
[ 4, 14]])
从中选择一个数组:
In [407]: arr = np.stack(g)
/usr/local/lib/python3.6/dist-packages/IPython/core/interactiveshell.py:3242:
FutureWarning: arrays to stack must be passed as a "sequence"
type such as list or tuple. Support for non-sequence iterables
such as generators is deprecated as of NumPy 1.16 and will raise
an error in the future.
if (await self.run_code(code, result, async_=asy)):
In [408]: arr
Out[408]:
array([[ 0, 10],
[ 1, 11],
[ 2, 12],
[ 3, 13],
[ 4, 14]])
第一列:
In [409]: arr[:,0]
Out[409]: array([0, 1, 2, 3, 4])
或者将fromiter
与复合数据类型一起使用以生成结构化数组:
In [410]: g = ((i,i+10) for i in range(5))
In [411]: arr = np.fromiter(g, 'i,i')
In [412]: arr
Out[412]:
array([(0, 10), (1, 11), (2, 12), (3, 13), (4, 14)],
dtype=[('f0', '<i4'), ('f1', '<i4')])
In [413]: arr['f0']
Out[413]: array([0, 1, 2, 3, 4], dtype=int32)
迟早您必须“实例化”生成器。生成器仅在链接多个生成器时保存内存。numpy数组存储所有值,而不是生成器或其“潜在”值。因此,当最终目标是阵列时,生成器没有那么有用。是的,我做了一些实验,你说得对:使用生成器没有那么有用。我想将生成的所有(x,y)写入两个文件,以避免使用太多内存,但在查看我的内存时:它不工作。希望我能运行我的代码,但是,这有点令人沮丧。。。谢谢你的回答!你回答得很好:)