我正在编写一些函数,这些函数沿着目录树向下移动,在那里按名称对文件进行排序,并对它们进行编码 + 表格中的更多信息。
我将此表定义为 Numpy vstack 数组。 一开始,它向数组添加条目的速度快如闪电,但当它达到大约 20 000 个条目时,它会慢很多。如此之多,以至于要达到大约 90 000 个填充行的目标需要大约 10 分钟。
我非常怀疑 vstack 是罪魁祸首,因为它可能正在复制整个表 + 我附加到它的行。 Numpy 官方文档说 vstacking 只不过是“串联”......但这并没有回答我的问题。
因此,np.vstack() 是否会查看要粘合在一起的数组的大小,然后分配所需的内存并复制我们正在堆叠的数组的内容?
更新: 女士们先生们,为了统计数据,使用列表将执行时间缩短到 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]])
关于python - Numpy 的 vstack 是否创建一个新数组 - 它组合的数组的副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54269404/