Python 在for循环中使用np.hstack(或np.vstack)或更改先前创建的np.zeros数组的列,创建矩阵的速度更快的是什么?

Python 在for循环中使用np.hstack(或np.vstack)或更改先前创建的np.zeros数组的列,创建矩阵的速度更快的是什么?,python,numpy,Python,Numpy,我试图在for循环中创建一个矩阵(一次一列)。 哪种方法更快?创建np.empty()数组并使用np.hstack()追加列,或创建所需形状的np.zeros()数组并更改数组的列 TIA当大小足够大以至于数组操作非常重要时,np.zeros()会更快 原因是numpy阵列连续存储在一个大内存块中。为阵列分配内存需要时间。当使用hstack时,您需要不断增加阵列的内存,这意味着重新分配内存并将所有数据复制到新位置,这实际上是一个O(n^2)操作。使用np.zero进行预分配节省了您的时间。这np

我试图在for循环中创建一个矩阵(一次一列)。 哪种方法更快?创建
np.empty()
数组并使用
np.hstack()
追加列,或创建所需形状的
np.zeros()
数组并更改数组的列

TIA当大小足够大以至于数组操作非常重要时,np.zeros()会更快


原因是numpy阵列连续存储在一个大内存块中。为阵列分配内存需要时间。当使用
hstack
时,您需要不断增加阵列的内存,这意味着重新分配内存并将所有数据复制到新位置,这实际上是一个
O(n^2)
操作。使用
np.zero进行预分配节省了您的时间。

np.empty()
有什么用?什么形状?你做过实验吗?完成了一些计时?重复的
hstack
(或其他版本的
串联
)每次生成一个新数组,带有完整副本。你认为那会很快吗?在许多这样的问题中,建议要么将值分配给预分配的数组,要么使用list append收集列,并在末尾执行一个“堆栈”。但是做一些测试吧!请出示具有代表性尺寸的“最小完整可验证示例”代码,有人可能会更果断地帮助您。。。否则我们只是猜测。