【问题标题】:Python - How to create an empty numpy array and append to it, like lists [duplicate]Python - 如何创建一个空的numpy数组并附加到它,如列表[重复]
【发布时间】:2019-02-28 07:21:55
【问题描述】:

这是我在互联网上不容易找到的东西。创建np.arrays 很容易,但是如何创建一个空的以便随时追加?

【问题讨论】:

  • 你不应该这样做。 Numpy 数组不是为了改变大小而设计的,首先构建列表然后转换为数组,或者初始化一个正确形状的空数组并按索引填充值(如果最终形状已知)
  • 但如果你确实想要这样做,Google 搜索中的“numpy append”会给出this 作为第一个结果
  • 您通常不要这样做numpy.ndarray 对象并非旨在让您这样做。 Numpy 数组和list 对象具有非常不同的性能权衡。如果你真的想这样做,请使用列表并在最后转换为数组。
  • @PhilippeFanaro 绝对不可取。 np.append 是线性时间运算。使用它来填充numpy.array 将创建二次时间行为。相比之下,list.append 是(aritized)常数时间,因此总体而言,构建列表将是线性时间。
  • 您不仅会牺牲内存,而且会在时间复杂度方面受到巨大的打击。除此之外,如果您尝试在频繁更改大小的列表上使用 numpy,则可能是时候检查一下为什么要使用 numpy

标签: python numpy


【解决方案1】:

建议使用普通的python列表,最后将列表转换为numpy数组。

x = np.asarray(x)

【讨论】:

    【解决方案2】:

    1。一个黑客

    您可以使用np.empty() 函数创建一个空数组并将维度指定为(0, 0),然后使用np.append() 稍后附加项目。

    >>> a = np.empty((0, 0))
    >>> a
    array([], shape=(0, 0), dtype=float64)
    >>> b = np.append(a, [1, 2])
    >>> b
    array([1., 2.])
    

    2。不过……

    上面的hack是不可取的,谨慎使用。附加到lists 具有O(N) 复杂性,而附加到数组具有O(N^2)(除了不同的内存使用)。那么,正确的方法应该是附加到lists。请注意,在numpy arrays 上使用list() 将它们转换为lists 是不正确的,因为您会得到numpy arrayslist。相反,请使用.tolist() 方法。

    >>> a = np.array([[1, 2], [3, 4]])
    >>>
    >>> list(a)
    [array([1, 2]), array([3, 4])]
    >>>
    >>> a.tolist()
    [[1, 2], [3, 4]]
    

    【讨论】:

      猜你喜欢
      • 2023-03-16
      • 2020-07-03
      • 1970-01-01
      • 2019-02-16
      • 2017-07-22
      • 2016-03-03
      • 2017-09-14
      • 2017-03-04
      相关资源
      最近更新 更多