python - 如何并行化 np.matmul 和 np.multiply?
问题描述
我有一个关于使用 numpy 进行矩阵计算的问题。如何并行化这些计算,例如np.matmul
和np.multiply
?我找不到任何描述如何使用并行化计算 np.matmul 的参考资料。
def time_shift_R(V, R_1, I0, t): # V is the potential function which returns an array
temp1 = V(xx, yy, t) + B*I0**2
temp = P*np.matmul(M, I0) + Q*np.matmul(I0, M) - np.multiply(temp1, I0)
R1 = ( R_1 - dt*temp ) / ( 1 - dt*B*R_1*I0 )
return R1
我提前感谢您的帮助。
解决方案
您可能需要做一些时间测试,看看究竟是什么花费了最多的时间。例如,在一台配备 Ubuntu linux 的相当普通的机器上:
制作一个复杂的数组(你没有引用任何大小,所以我只是猜测一些合理的东西):
In [60]: A = np.ones((1000,1000),complex)
multiply
和运算符 * 基本相同:
In [61]: timeit A*A
7.49 ms ± 4.99 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [62]: timeit np.multiply(A,A)
7.48 ms ± 6.72 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
matmul
是相当长一点,但后来它做的更多。更快的 BLAS 等效项可能会有所帮助。Notematmul
足够聪明,可以为转置案例使用专门的 BLAS 函数。@ 运算符基本相同。
In [63]: timeit np.matmul(A,A)
381 ms ± 8.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
In [64]: timeit np.matmul(A,A.T)
231 ms ± 9.84 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
和功率计算:
In [65]: timeit 10.0*A**2
14.4 ms ± 1.19 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
V(xx, yy, t)
是未知的。
推荐阅读
- keycloak - 生成 Keycloak 离线令牌
- android - 如何仅在进行 http 调用后启用导航单击?
- android - 如何从 NativeScript 应用程序捕获来自 Android WebView / WebViewClient 的事件?
- wix - 如何为wix velo corvid中的所有成员动态实现堆识别和addUserProperties
- .net - 使用 .NET 5 和 Docker 创建 Azure Functions
- bing - Bing 站长工具 Url Submission API
- java - 如何在 Intellij 中包含 javax.jms.*?
- python - 从 Python 中的索引列表创建二进制数组
- javascript - 通过转义 \n json 解析并通过数据解析
- testing - 房间迁移测试失败:找不到架构