【问题标题】:numpy array equivalent for += operator+= 运算符的 numpy 数组等效项
【发布时间】:2014-09-05 20:30:27
【问题描述】:

我经常做以下事情:

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 需要等维度的数组。

【问题讨论】:

  • 不,我的观点略有不同:想象一下您连续构建数组或者您想要以不同方式初始化每个元素的情况。但是,我确实需要完全相同的功能,而不仅仅是相同的结果。
  • 你为什么还要用这个循环?为什么不直接制作A = [[0,1],[1,2],[3,4]]
  • 另一个可能的重复项..您确实需要先研究您要查找的内容...stackoverflow.com/questions/10346336/…
  • 好的,抱歉这个不好的例子。我将再次编辑它...

标签: python numpy


【解决方案1】:

使用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])

【讨论】:

    【解决方案2】:

    要获得相同的数组A,请执行以下操作:

    A = numpy.arange(5)
    

    数组通常不意味着动态调整大小,但您可以使用numpy.concatenate

    【讨论】:

    • 我看到您的要求发生了变化 - 您一般要达到什么目标?
    • 基本上说,我将实现与我从 numpy 数组的基本 python 列表中的 += 运算符中所知道的相同的功能
    • @morph 查看np.hstacknp.vstack
    猜你喜欢
    • 1970-01-01
    • 2014-08-21
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多