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

时间:2019-09-10 01:51:49

标签: python arrays numpy

我有两个大小为(87256 X 87256)的numpy数组A和B。

我有一个不断变化的因子alpha。

我试图找到最快的获取途径:

alpha * A +(1-alpha)* B

使用简单的numpy进行计算大约需要4分8 s。

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

2 个答案:

答案 0 :(得分:1)

尝试切换到Numba,只需更改很少的代码行即可将Turbo放在Numpy上:通过充分利用CPU多核和/或GPU内核来并行化代码。

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

答案 1 :(得分:1)

尝试以下两个选项:

选项-A

# multiplying only once
C = B + alpha*(A-B)

选项B

我扩展了@Massifox的答案。

import numba
import numpy as np

def get_result(A, B, alpha = 0.5):
    return B + alpha*(A-B)

get_result_jit = numba.vectorize(['float64(float64, float64, float64)'])(get_result)

其他资源:

  1. Numba tutorial
  2. 查看装饰器的@numba.vectorize@numba.guvectorize@numba.jit and @numba.njit
  3. Speeding up algorithms with Numba