Python 如何使用生成器提供的所有样本的某些特定元素保存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

假设我有一个生成元组x,y的生成器。 我只想保存从这个生成器生成的所有x元素。 但是,我想使用.npy文件来实现这一点

我知道如果我的生成器每次迭代只生成一个元素,比如z,我可以使用下面的代码将这个元素保存在numpy数组文件中

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)写入两个文件,以避免使用太多内存,但在查看我的内存时:它不工作。希望我能运行我的代码,但是,这有点令人沮丧。。。谢谢你的回答!你回答得很好:)