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是不可取的,谨慎使用。附加到list
s 具有O(N)
复杂性,而附加到数组具有O(N^2)
(除了不同的内存使用)。那么,正确的方法应该是附加到list
s。请注意,在numpy arrays
上使用list()
将它们转换为list
s 是不正确的,因为您会得到numpy arrays
的list
。相反,请使用.tolist()
方法。
>>> a = np.array([[1, 2], [3, 4]])
>>>
>>> list(a)
[array([1, 2]), array([3, 4])]
>>>
>>> a.tolist()
[[1, 2], [3, 4]]
【讨论】:
以上是关于Python - 如何创建一个空的numpy数组并附加到它,如列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章