python - 如何将多处理池用于多变量函数python
问题描述
我正在尝试使用库多处理来运行下一个代码:
import matplotlib.pyplot as plt
import numpy as np
from multiprocessing import Pool
def newtalt(fun,x0,err,mit):
xnew = x0.copy()
F, dF = fun(x0)
r = F.copy()
M = dF.copy()
sigma = np.linalg.norm(r)
for k in range(mit):
if sigma < err:
break
d = np.linalg.solve(M, -r)
xnew = xnew + d
r, M = fun(xnew)
sigma = np.linalg.norm(r)
return xnew, k
def fun(x):
f_r = x[0] ** 3 - 3 * x[0] * (x[1] ** 2) - 1
f_i = 3 * (x[0]**2) * x[1] - (x[1] ** 3)
f = np.array([f_r,f_i])
df_rx = 3 * (x[0] ** 2) - 3 * (x[1] ** 2)
df_ry = -6 * x[0] * x[1]
df_ix = 6 * x[0] * x[1]
df_iy = 3 * (x[0] ** 2) - 3 * (x[1] ** 2)
df = np.array([[df_rx,df_ry],[df_ix,df_iy]])
return f, df
if __name__=='__main__':
pool = Pool(processes=10)
err = 1e-5
mit = 300
N = 50
x = np.linspace(-2.5, 2.5, N)
y = np.linspace(-2.5, 2.5, N)
A = np.zeros((N, N))
B = np.zeros([N, N, 4], dtype=int)
for i in range(N):
for j in range(N):
z = np.array([x[i], y[j]])
xsol, it = pool.map(newtonalt,(fun,z,err,mit))
pool.close()
A[i,j] = it
plt.imshow(A,cmap='Set1')
plt.show()
显然它不起作用,因为我真的不知道如何正确使用多处理,而且当你使用的函数有多个参数时就更难了。我读到在 for 循环中使用 .pool() 不好,但无论如何,正如我所说,我真的迷失了这个库。
解决方案
推荐阅读
- html - 如何将导航栏菜单项向右对齐?
- reactjs - 在 suneditor 中触发 @ 事件时从数据库中提及用户
- kotlin - WorkManager 观察改造进度
- css - 如何使绝对 div 覆盖从相对 div 出现的页面上,距离顶部大约 300px 400 px,以扩展到页面底部?
- java - 在 JDK Flight Recorder 文件中反混淆堆栈跟踪和类/方法名称
- assembly - 如何以与 clang -c main.c 相同的方式从汇编程序源生成目标文件
- javascript - xlsx文件在本机反应中转换为pdf?
- matlab - For 循环从 Datastore 中选择文件
- unity3d - 自定义 onClick 列表
- css - 媒体查询在手机上不起作用,但在调整浏览器窗口大小时会起作用