我在python中工作,我遇到了一个问题:我必须初始化一个巨大的数组(21 x 2000 x 4000矩阵),以便我可以在其上复制一个子矩阵。 问题是我希望它真的很快,因为它是用于实时应用程序,但是当我运行numpy.ones((21,2000,4000))时,创建这个矩阵大约需要一分钟。 当我运行numpy.zeros((21,2000,4000))时,它是瞬时的,但是一旦我复制子矩阵,它需要一分钟,而在第一种情况下,复制部分是瞬时的。
有没有更快的方法来初始化庞大的数组?
答案 0 :(得分:1)
我猜这不是一个更快的方式。您正在构建的矩阵非常大(8字节float64 x 21 x 2000 x 4000 = 1.25 GB),可能会耗尽系统中的大部分物理内存;因此,您等待的那一分钟可能是因为操作系统必须将其他东西分页以腾出空间。您可以在进行分配并观察内存使用和分页时,通过观看top
或类似内容(例如,系统监视器)来检查此内容。
numpy.zeros
似乎是瞬间的,因为操作系统懒惰地分配了内存。但是,只要您尝试使用它,操作系统实际上必须在某处适合该数据。见Why the performance difference between numpy.zeros and numpy.zeros_like?
您是否可以重新构建代码,以便只创建要复制的子矩阵,而无需创建大矩阵?