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

4
说我们有一个大小为(1,N)的数据流,它是一个numpy数组。
read_data = [[foo, foo_1, foo_2]]

我们希望对此进行操作,或将其简单地附加到一个更大的数组中。

data=np.vstack((data,real_data)) (or whatever method you choose)

我的问题通常在于我不知道传入数据的维度,所以有时我会这样做:

  • 我用已知的维度生成一个缓冲区并开始填充它。
  • 我生成一个首次无用读取(即空的或零的)并将其追加到缓冲区中,然后删除它。

在Matlab中,这非常容易,因为只要你提供数据,它就会动态创建你需要的数组(虽然不建议这样做)。

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


你想将foo的单个值附加到data中,还是整个foo数组?如果你只想读取numpy数组并将它们的值添加到data中,也许可以使用类似于newsize = data.shape +1data.resize(newsize)data[newsize] = yourdata这样的方法来增加data的大小。 - seth
1个回答

1
我认为一个好的选项是:


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

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



4
这也是我的第一反应,但 numpy.append 会创建原始数组的副本,对于大型数组来说这是不可行的。而 resize 可以直接在原始数组上进行改变。 - seth
1
@seth 我怀疑这并不是保证的。如果 resize 的行为类似于 realloc,那么它可能需要根据内存的“碎片化”来复制数组(在这种情况下,它几乎与调用 append 相同)。 - Bakuriu
2
NumPy只能处理在内存中规则间隔的数组。一般来说,如果没有每次创建一个新数组,就无法实现您想要的操作。当然,您可以为每个传入数据位创建一个新数组,并仅在最后或定期组合它们。 - Henry Gomersall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接