我正在编写一些函数,这些函数沿目录树行进,在其中按名称排序文件,并对它们进行编码,并将更多信息存储在表中。
我将此表定义为Numpy vstack数组。 一开始,它向阵列中添加条目的速度很快,但是当达到约20000条目时,它的速度就会大大降低。如此之多,要达到大约9万个填充行的目标,大约需要10分钟。
我非常怀疑vstack是元凶,因为也许它正在复制整个表+我要附加的行。 Numpy的官方文档说vstacking只不过是“串联”而已……但这并不能回答我的问题。
因此,np.vstack()是否正在查看将要粘合在一起的数组的大小,然后分配所需的内存并复制要堆叠的数组的内容?
更新: 仅仅为了统计女士们和先生们,使用列表将执行时间缩短到0.5s。速度快了20倍以上,实际上还比这还快,因为我的测量方法包括一些额外的操作。
答案 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]])