当我尝试对Python中的方程式执行矩阵运算时,收到以下错误:
TypeError:仅整数标量数组可以转换为标量索引
我翻译这种方式的方式是,Python告诉我无法通过具有浮点值的矩阵运算来创建1x1矩阵,但这对我来说意义为零。
我的代码在这里:
x0 = np.array([[-1.1], [1.1]])
dfx = lambda x: np.array([-400*x[0]*x[1]+400*np.power(x[0],3)+2*x[0]-2, 200*(x[1]-np.square(x[0]))], dtype='float32')
temp = np.zeros((2,1))
gamma = np.zeros((2,1))
delta = np.zeros((2,1))
hess = np.eye(2, dtype='float32')
deltaX = np.dot(-hess,dfx(x0))
p = t*deltaX
temp = x0+t*deltaX
q = dfx(temp)-dfx(x0)
htemp = hess + np.dot(1 + np.divide(np.dot(np.dot(np.transpose(q,hess),q)), np.dot(np.transpose(p),q)), np.divide(np.dot(p,np.transpose(p)),np.dot(np.transpose(p),q)))
在测试代码时,执行除法运算时会出现错误:
print(np.divide(np.dot(np.dot(np.transpose(q,hess),q)), np.dot(np.transpose(p),q)))
答案 0 :(得分:0)
问题似乎是np.transpose(q,hess)
,而不是np.dot(np.transpose(q),hess)
,因为前者没有意义。
我还建议将htemp
项分解为不同的变量(例如T1 = hess,T2 = 1 + q ^ TH q / p ^ Tq,等等),然后对其求和,因此代码将更可追踪。