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

标签 python arrays numpy

我正在编写一些函数,这些函数沿着目录树向下移动,在那里按名称对文件进行排序,并对它们进行编码 + 表格中的更多信息。

我将此表定义为 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/

相关文章:

python - 计算100个n维点的欧式范数?

python - 为什么文件名struct.py报错?

Python多维符号自动转置

python - django-nose 与默认的 Django 测试运行器有何不同

python - 是否有用于 Python 的类似 Spock 的测试库

python - 如何让selenium等待多个元素加载

c - 通过结构将整个数组分配给 C 中的另一个数组

python - 如何同时计算一个巨大文件中的词频?

python - 如何使用不均匀子数组作为平铺来平铺一维 numpy 数组?

java - 为什么 java 不将 int[] 自动装箱到 Integer[]