在Python中动态增加numpy数组的最佳方法是什么?

Leo*_*fox 5 python arrays numpy

假设我们有一个大小为 (1,N) 的传入数据流,它是一个 numpy 数组

read_data = [[foo, foo_1, foo_2]]
Run Code Online (Sandbox Code Playgroud)

我们想用它做一些事情或者简单地将它附加到一个更大的数组中。

data=np.vstack((data,real_data)) (or whatever method you choose)
Run Code Online (Sandbox Code Playgroud)

我的麻烦通常是因为我不知道传入数据的维度,所以我有时会做的是:

  • 我生成一个具有已知尺寸的缓冲区并开始填充它。
  • 我生成第一个垃圾读取,要么是空的,要么是带零的,然后将其附加到它上面,然后将其删除。

在 matlab 中这非常简单,因为它会在您提供数据后立即动态创建您需要的数组(尽管不建议这样做)

在 python 中最好的方法是什么?

Jbl*_*sco 2

我认为一个好的选择是:

import numpy
first_array = numpy.array([1,2,3])
new_array = numpy.append(first_array, [4,5,6])
print new_array
Run Code Online (Sandbox Code Playgroud)

输出为:[1 2 3 4 5 6]

  • 这也是我的第一个想法,但唯一的问题是“numpy.append”创建原始数组的副本,这对于大型数组来说变得令人望而却步。不过,“resize”会改变原始数组。 (6认同)
  • numpy 只能处理内存中规则间隔的数组。一般来说,如果不每次都创建一个新数组,就无法完成您想要的操作。当然,您可以为每一位传入数据创建一个新数组,并仅在最后或定期组合它们。 (3认同)
  • @seth我怀疑这是有保证的。如果“resize”充当“realloc”,那么它可能必须根据内存的“碎片”来复制数组(在这种情况下,它“几乎”与调用“append”相同)。 (2认同)