为了账号安全,请及时绑定邮箱和手机立即绑定

Numpy 数组索引问题

Numpy 数组索引问题

慕少森 2021-11-30 10:20:09
我正在尝试为多变量场景实现 Newtons_method。我正在尝试输出多次迭代,但出现索引错误import symenginefrom symengine import varimport numpy as npvars =var("x y")sol=[]def jacob():    f = ['2*x+y**2-8','x**2-y**2+x*y-3'] # Define function    J = symengine.zeros(len(f),len(vars)) # Initialise Jacobian matrix    # Fill Jacobian matrix with entries    for i, fi in enumerate(f):        for j, s in enumerate(vars):            J[i,j] = symengine.diff(fi, s)            sol.append(J[i,j])    a = np.array([sol[0],sol[1],sol[2],sol[3]])    return adef eval1(func,val1,val2):    z=[]    for b in func:        b=str(b)        x=val1        y=val2        z.append(eval(b))    return np.array([[z[0],z[1]],[z[2],z[3]]])def newtons_method(f, df, x0, e):    q=10    while q > e:        q=q-1        x0 = np.absolute(x0 - (np.array([[f(x0[0][0])],[df(x0[1][0])]]))/(eval1(jacob(),x0[0][0],x0[1][0])))    print('Root is at: ', x0)    print('f(x) at root is: ', f(x0))def f(x):    return 2*x+y**2-8def df(x):    return x**2-y**2+x*y-3x0s = np.array([[1],[1]])for x0 in x0s:    newtons_method(f, df, x0, 1)我收到错误:标量变量的索引无效。 我在 newtons_method 函数下将值设置为 x0 的地方,对出了什么问题有什么想法吗?
查看完整描述

1 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

当调用 newtons_method 函数时,[[1],[1]] 即 [1] 的元素作为参数 x0 被传递。在函数内部,x0[0][0] 已被使用,它为标量变量错误提供了无效索引。

如果您想同时使用这两个元素,您应该将 x0s 作为参数传递。

x0s = np.array([[1],[1]])
newtons_method(f, df, x0s, 1)


查看完整回答
反对 回复 2021-11-30
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信