Python 错误 - 类型错误:一元运算符“-”的错误操作数类型:“NoneType”

3
我在一个函数中有以下for循环:
def Cost_F(Y, Ypred, m):

    for i in range(0,m):
        # Y and Ypred
        X = np.matmul(-Y, np.log10(Ypred))

Y 和 Ypred 的维度都是 (10,1)

Y 和 Ypred 的类型是 class 'numpy.matrixlib.defmatrix.matrix'

来自 cmd 的错误信息为 TypeError: bad operand type for unary -: 'NoneType'


我正在使用 print(type(Y)) 和 **print(type(Ypred)),并且从命令提示符中得到了以下输出:class 'numpy.matrixlib.defmatrix.matrix'**。 - Tom_Tom
1个回答

8
-Y

你尝试使用的方法不起作用。你的意思是:
-1*Y

在你的情况下,Python 试图做的是:
None - Y

这显然行不通,因为它把 - 解释为一个有左边和右边的操作数。在你的情况下,你没有提供左边,所以它假设 None,然后找不到任何左边是 None 而右边是矩阵的 - 的实现。


1
只有当Y是一个没有实现一元运算符__neg__()的对象时,这个答案才是正确的。对于那些已经实现了它的对象来说,这显然是不正确的(例如,Y=np.array([1,2,3]); print(-Y))。 - Keto
1
你的回答是误导性的,暗示解决方案是-1*Y。你的陈述“在你的情况下,你没有提供左侧,所以它假定为None,然后找不到任何实现-的地方,其中左侧为None,右侧为矩阵”在这种情况下是不正确的。相反,OP传递了无法取反的Y(不是实现__neg __()的对象),或者在numpy的情况下,Y确实是一个矩阵,但包含NoneType(例如,-np.matrix([None])将产生相同的错误)。 - Keto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接