Numpy的vstack是否创建了一个新数组 - 它组合的数组的副本?



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

我将此表定义为Numpy vstack数组。一开始,它向数组中添加条目的速度非常快,但当它达到大约20000个条目时,速度会减慢很多。如此之多,以至于要达到约9万排人口的目标,大约需要10分钟。

我非常怀疑vstack是罪魁祸首,因为它可能是在复制整个表+我附加到它的行。Numpy的官方文档说vstacking不过是"串联"。。。但这并不能回答我的问题。

因此,np.vstack()是在查看将要粘合在一起的数组的大小,然后对所需的内存进行mallocate并复制我们正在堆叠的数组的内容吗?

更新:对于统计数据,女士们,先生们,使用列表将执行时间提高到0.5秒。这快了20多倍,事实上甚至比这还快,因为我的度量包括一些额外的操作。

没错,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]])

最新更新