numpy数组中相当于+=运算符的操作

3

我经常做以下操作:

import numpy as np

def my_generator_fun():
    yield x # some magically generated x

A = []
for x in my_generator_fun():
    A += [x]
A = np.array(A)

有没有更好的解决方案可以从一开始就操作numpy数组并避免创建标准Python列表?
请注意,+=运算符允许您使用任意维度的数组扩展一个空的、无维数的数组,而np.append和np.concatenate则要求等维数的数组。

可能是 https://dev59.com/2m855IYBdhLWcg3wGQTY 的重复问题。 - John Ruddell
不,我的观点略有不同:想象一下你连续构建数组或者想要初始化每个元素的情况。然而,我确实需要完全相同的功能,而不仅仅是相同的结果。 - morph
你为什么要使用循环做这件事情?为什么不直接写成A = [[0,1],[1,2],[3,4]]的形式呢? - John Ruddell
另一个可能的重复问题..你真的需要先研究一下你要找什么...https://dev59.com/TGkv5IYBdhLWcg3wxz2A - John Ruddell
好的,抱歉给你带来了困扰。我会再次进行编辑。 - morph
我刚刚又编辑了我的查询...也许是这样的吗?不确定你从函数中得到了什么返回值。 - John Ruddell
2个回答

4

使用np.fromiter函数:

def f(n):
    for j in range(n):
        yield j

>>> np.fromiter(f(5), dtype=np.intp)
array([0, 1, 2, 3, 4])

如果你事先知道迭代器将返回的项目数量,你可以使用count关键字参数来加快速度:

>>> np.fromiter(f(5), dtype=np.intp, count=5)
array([0, 1, 2, 3, 4])

0
要获得相同的数组 A,请执行以下操作:
A = numpy.arange(5)

数组通常不是为动态大小而设计的,但是你可以使用 numpy.concatenate


我看到您的需求已经改变了 - 您总体上想要实现什么? - mdurant
基本上说,我将实现与基本Python列表中的+=运算符相同的功能,用于NumPy数组。 - morph
@morph 可以查看 np.hstacknp.vstack - Paul H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接