Numpy的vstack是否创建新数组-合并的数组的副本?

时间:2019-01-19 17:06:18

标签: python arrays numpy

我正在编写一些函数,这些函数沿目录树行进,在其中按名称排序文件,并对它们进行编码,并将更多信息存储在表中。

我将此表定义为Numpy vstack数组。 一开始,它向阵列中添加条目的速度很快,但是当达到约20000条目时,它的速度就会大大降低。如此之多,要达到大约9万个填充行的目标,大约需要10分钟。

我非常怀疑vstack是元凶,因为也许它正在复制整个表+我要附加的行。 Numpy的官方文档说vstacking只不过是“串联”而已……但这并不能回答我的问题。

因此,np.vstack()是否正在查看将要粘合在一起的数组的大小,然后分配所需的内存并复制要堆叠的数组的内容?

更新: 仅仅为了统计女士们和先生们,使用列表将执行时间缩短到0.5s。速度快了20倍以上,实际上还比这还快,因为我的测量方法包括一些额外的操作。

1 个答案:

答案 0 :(得分:4)

您是对的,np.vstack复制了整个数组。

您可以进行一些小型的python体验来确认它:

a = np.array([[1,2,3]])
b = np.array([[4,5,6]])
res = np.vstack((a,b))
res
array([[1, 2, 3],
       [4, 5, 6]])

然后,如果您修改数组a并打印res,您可以看到res是 未修改

a[0,2] = 19
res
array([[1, 2, 3],
       [4, 5, 6]])