【问题标题】:Can I not divide a matrix by a float in Python?我不能在 Python 中将矩阵除以浮点数吗?
【发布时间】:2019-02-20 09:22:18
【问题描述】:

当我尝试在 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)))

如果有人对它是什么等式感到好奇,那就是这个人的一部分:

【问题讨论】:

  • 我同意,transpose 看起来很可疑。这不是分区。这是一个错误类型或大小的函数参数。而且,q 的形状是什么?看起来可能是 1d。
  • 你有一些括号不匹配那里;)而不是有一个巨大的表达,分解成更小的块,你会发现它
  • 啊,我喜欢我花了这么长时间试图弄清楚为什么我的代码被破坏只是因为它是这样小的东西(:谢谢你的帮助,我会打破那个表达现在

标签: python numpy typeerror


【解决方案1】:

问题似乎是np.transpose(q,hess) 而不是np.dot(np.transpose(q),hess),因为前者毫无意义。

我还建议将htemp 术语分解为不同的变量(如 T1 = hess、T2= 1+q^TH q/p^Tq 等),然后将它们相加,这样代码将更易于跟踪.

【讨论】:

    猜你喜欢
    • 2020-05-14
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多