Python - 如何创建一个空的numpy数组并附加到它,如列表[重复]

Posted

技术标签:

【中文标题】Python - 如何创建一个空的numpy数组并附加到它,如列表[重复]【英文标题】:Python - How to create an empty numpy array and append to it, like lists [duplicate] 【发布时间】: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 【参考方案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]]

【讨论】:

以上是关于Python - 如何创建一个空的numpy数组并附加到它,如列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Pybind11:从 C++ 端创建并返回 numpy 数组

2 如何用Python进行数据计算

numpy如何沿维度拆分数组?

numpy数组和python数组的区别

Numpy科学计算从放弃到入门

如何在 python 中读取多个 wav 文件,并转换为 numpy 数组进行绘图