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

Python scipy.optimize.minimize IndexError 使用 [0,0]

Python scipy.optimize.minimize IndexError 使用 [0,0]

四季花海 2023-02-22 15:24:55
我发现当我使用 .item() 从目标函数中的 numpy 数组中检索值时 scipy.optimize.minimize 有效,但是当我通过索引 [0,0] 检索时它失败了:def sigmoid(Z):    return 1 / (1 + np.exp(-Z))def hyp_log(X, theta):    return sigmoid(X @ theta)def cost_log(theta, X, Y, reg_const=0):    hyp = hyp_log(X, theta)    return  (Y.T @ -np.log(hyp) + (1-Y).T @ -np.log(1-hyp)).item() / len(X) + reg_const * (theta[1:].T @ theta[1:]).item() / (2 * len(X))result = minimize(cost_log, theta, args=(X,Y,reg_const), method='TNC')如果我使用[0,0]索引而不是.item()在cost_log函数中使用索引,函数本身的工作方式与以前完全相同,但将IndexError: too many indices for array. 我想了解为什么会发生这种情况以及在使用最小化时在目标函数中应注意的事项。
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

由于您没有提供Xor Y,我不会看:


(Y.T @ -np.log(hyp) + (1-Y).T @ -np.log(1-hyp))

但与:


(theta[1:].T @ theta[1:]).item()

如果theta是(n,1):


In [15]: theta = np.arange(5)[:,None]                                                   

In [16]: theta.shape                                                                    

Out[16]: (5, 1)

In [17]: (theta[1:].T @ theta[1:])                                                      

Out[17]: array([[30]])

In [18]: (theta[1:].T @ theta[1:])[0,0]                                                 

Out[18]: 30

In [19]: (theta[1:].T @ theta[1:]).item()                                               

Out[19]: 30

但是如果你把它theta给minimize,它会把它分解成 (n,) 形状:


In [20]: theta=theta.ravel()                                                            

In [21]: (theta[1:].T @ theta[1:])                                                      

Out[21]: 30

In [22]: (theta[1:].T @ theta[1:]).shape                                                

Out[22]: ()

In [23]: (theta[1:].T @ theta[1:]).item()                                               

Out[23]: 30

In [24]: (theta[1:].T @ theta[1:])[0,0]                                                 

...

IndexError: invalid index to scalar variable.

I 正如最初所写的那样,item可以与单个项目数组一起使用,而不管尺寸如何。 [0,0]仅适用于二维(或更高)数组。


查看完整回答
反对 回复 2023-02-22
  • 1 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

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