KDX*_*DX2 4 python arrays numpy
我正在编写一些函数,这些函数沿目录树移动,在那里按名称对文件进行排序,并对它们进行编码并在表中提供更多信息。
我将此表定义为Numpy vstack数组。一开始,它向阵列中添加条目的速度很快,但是当达到约20000条目时,它的速度就会大大降低。如此之多,要达到大约9万个填充行的目标,大约需要10分钟。
我非常怀疑vstack是元凶,因为也许它正在复制整个表+我要附加的行。Numpy的官方文档说vstacking只不过是“串联”而已……但这并不能回答我的问题。
因此,np.vstack()是否正在查看将要粘合在一起的数组的大小,然后分配所需的内存并复制要堆叠的数组的内容?
更新: 仅仅为了统计女士们和先生们,使用列表将执行时间缩短到0.5s。这快了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]])
Run Code Online (Sandbox Code Playgroud)
然后,如果您修改数组a并打印res,则可以看到res未修改
a[0,2] = 19
res
array([[1, 2, 3],
[4, 5, 6]])
Run Code Online (Sandbox Code Playgroud)