问题描述
当我尝试对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)))
如果有人对它是什么方程式感到好奇,它就是这个家伙的一部分:
1楼
问题似乎是np.transpose(q,hess)
而不是np.dot(np.transpose(q),hess)
,因为前者是没有意义的。
我还建议将htemp
项分解为不同的变量(例如T1 = hess,T2 = 1 + q ^ TH q / p ^ Tq,等等),然后对其求和,这样代码将更易于跟踪。