Python中的数组多线程求和

2024-09-28 21:40:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个大小为n1 X n2的数组,我想把它们并行地加在一起。我有一个启用了openMPPython版本,但是当我在bashshell内部设置export OMP_NUM_THREADS=4时,我看不到我的代码是多线程的。是否可以以多种方式执行arr = arr + tarr?在

#!/usr/bin/env python

import numpy as np

n1 = 20000
n2 = 20000

arr = np.random.random_sample((n1,n2))

for i in range(10):
    tarr = np.random.random_sample((n1,n2))
    arr = arr+tarr

Tags: sample版本npexportrandom数组numarr
1条回答
网友
1楼 · 发布于 2024-09-28 21:40:27

你的BLAS链接只与线性代数运算有关(矩阵积、求解线性系统等)。numpy本身不在数组上执行基本的元素算术运算(如加法、非矩阵乘法、求幂等)。在

多线程计算最简单的选择之一是使用numexpr

In [1]: import numpy as np

In [2]: import numexpr as ne

In [3]: n1, n2 = 5000, 5000

In [4]: x = np.random.randn(n1, n2)

In [5]: %%timeit y = np.random.randn(n1, n2)
   ...: x + y
   ...: 
1 loops, best of 3: 245 ms per loop

In [6]: %%timeit y = np.random.randn(n1, n2)
   ...: ne.evaluate('x + y')
   ...: 
10 loops, best of 3: 83.6 ms per loop

相关问题 更多 >