【问题标题】:Spearman rank correlation - TypeError: 'int' object is not callableSpearman 等级相关性 - TypeError:'int' 对象不可调用
【发布时间】:2020-04-29 04:31:05
【问题描述】:
studlst = [['ABDIHAFITH', 8, 16, 19, 20, 3, 25, 16, 2, 9], ['ADAM', 12, 9, 17, 24, 13, 6, 15, 13, 30]

spearman = []

    dsquare = 0.0
    count = 0
    i = 0

    while i < len(studlst):
        dsquare += (studlst[i][1] - studlst[i][count+2])**2
        i += 1
        if i == len(studlst):
            count += 1
            spear = 1-((6*dsquare)/(len(studlst)(len(studlst)**2-1)))
            spearman.append(spear)
            if len(spearman) == (len(studlst[0])-2):
                break
            i = 0
            dsquare = 0

我不断收到错误“TypeError:'int' object is not callable”。对于创建矛值的线(spermans 等级相关性)。我尝试将该行上的两个 len(studlst) 转换为浮点数,但它返回相同的错误,将浮点数替换为 int。我应该怎么办?谢谢

编辑: 问题源于错误的语法,应该将 len(studlst) 和括号相乘

【问题讨论】:

  • 用你自己的话说,你认为len(studlst)(len(studlst)**2-1)) 是什么意思?
  • 提示:你为什么(6)(dsquare)?那也行不通;想必你已经明白为什么了。
  • 问题源于我的意思是乘以 len(studlst) 和括号

标签: python python-3.x math typeerror


【解决方案1】:

这部分看起来有问题:

len(studlst)(len(studlst)**2-1)

len 产生一个 int,下面的括号表达式被解析为调用。

如果您要获取产品,请使用 * 运算符:

len(studlst) * (len (studlst)**2 - 1)

【讨论】:

    【解决方案2】:

    在您的代码中,(len(studlst)(len(studlst)**2-1)) 部分

    评估为int(some_value),因为(len(studlst) 会给你一个int(len(studlst)**2-1) 将是一些价值。

    所以您将 int(some_value) 作为代码的最终产品,这意味着您将 int 视为某种函数并以某种值调用它,例如

    foo(x): pass

    然后是foo(0)

    这是导致问题的原因。如果您打算相乘,请将等式更改为 (len(studlst) * (len(studlst)**2-1))

    【讨论】:

      猜你喜欢
      • 2012-04-03
      • 1970-01-01
      • 2013-04-03
      • 2017-12-20
      • 2023-03-03
      相关资源
      最近更新 更多