Python 获得两个大型阵列的线性组合的快速方法是什么?

Python 获得两个大型阵列的线性组合的快速方法是什么?,python,arrays,numpy,Python,Arrays,Numpy,我有两个尺寸为(87256 X 87256)的numpy数组A和B 我有一个单因子α,我一直在改变 我正在努力找到最快的方式: α*A+(1-α)*B 使用简单的numpy,计算大约需要4分钟8秒 计算此数组的最快方法是什么?我有一个多核系统,所以并行计算不是一个限制。试着切换到更改很少的代码行,把turbo放在你的Numpy上:通过充分利用CPU多核和/或GPU核来并行化你的代码 Numba是一个开源JIT编译器,它将Python和NumPy代码的子集转换为快速机器代码。尝试以下两种方法: 方

我有两个尺寸为(87256 X 87256)的numpy数组A和B

我有一个单因子α,我一直在改变

我正在努力找到最快的方式:

α*A+(1-α)*B

使用简单的numpy,计算大约需要4分钟8秒

计算此数组的最快方法是什么?我有一个多核系统,所以并行计算不是一个限制。

试着切换到更改很少的代码行,把turbo放在你的Numpy上:通过充分利用CPU多核和/或GPU核来并行化你的代码


Numba是一个开源JIT编译器,它将Python和NumPy代码的子集转换为快速机器代码。

尝试以下两种方法:

方案A
#仅相乘一次
C=B+alpha*(A-B)
选项B 我进一步阐述了@Massifox的答案

导入numba
将numpy作为np导入
def get_结果(A、B、α=0.5):
返回B+alpha*(A-B)
get_result_jit=numba.vectorize(['float64(float64,float64,float64)')(get_result)
其他资源:
  • 请参阅decorators以了解:、和

  • 如果你提前知道所有的alpha值,你也可以矢量化那个位。但这可能还需要很长时间…你可能也会被内存问题所阻碍。数组A有大约76亿个条目。假设这些条目是4字节浮点,则A将需要大约30GB的存储空间。B也将如此。结果数组也将如此。如果您的系统中没有超过90 GB的RAM,操作系统将不得不将这些阵列的某些部分分页到磁盘,而不考虑计算的并行化。