【问题标题】:unsupported operand type(s) for -: 'function' and 'function'- 不支持的操作数类型:“function”和“function”
【发布时间】:2021-12-03 16:48:53
【问题描述】:

我有一个问题,我试图返回数组中对象的计数在 1 个标准差以内。为了获得标准偏差,我创建了两个函数,但现在我无法添加/减去函数。我试图将函数转换为整数,但开始收到关于我的标准偏差是浮点数的错误。有什么更好的方法来完成这一切?

import numpy as np
import math
vac_nums=np.array([180, 172, 178, 185, 190, 195, 192, 200, 210, 190])
def variance():
    n = len(vac_nums)
    mean = sum(vac_nums)/n
    deviations = [(x - mean) ** 2 for x in vac_nums]
    variance = sum(deviations)/n
    return variance
print(variance())
def stdev():
    var = variance()
    std_dev = math.sqrt(var)
    return std_dev
print(stdev())
sum = 0 
for x in vac_nums:
    if np.array(x) >=(variance-stdev) and np.array(x) <=(variance+stdev):
        sum += 1
print(sum)

【问题讨论】:

  • 既然你使用numpy,为什么不使用std_dev = np.std(vac_nums)
  • 为什么要减去函数?这是没有意义的。也许您想减去函数返回的值? variance() - stdev()
  • 另外,不要将变量命名为sum,因为它会替换variance 在循环中调用它时将使用的内置函数。
  • 考虑您应该提供您的打印输出和完整的代码错误回溯,以获得minimal reproducible example
  • @not_speshal 道歉,我应该澄清一下。我实际上将把它输入到sololearn中来回答他们已经创建了一个数组的问题。我不能在他们的领域导入。我只导入了 numpy 来在 Visual Studio Code 中添加数组。

标签: python numpy standard-deviation


【解决方案1】:

python 中的函数是first class objects,整数、列表、类以及您可能在短时间内想到的所有其他内容也是如此。函数可以被调用,在这种情况下它返回一个返回值。使用() 运算符调用函数,有时包含参数

您在代码中创建了两个函数对象:variancestdev。这两个名称指的是函数对象。

您在其后的每个print 语句中调用函数。例如,variance() 是一个返回 float 的调用,您可以将其打印出来。

正如您所料,两个函数对象的总和是没有意义的。您可以有意义地添加整数、浮点数甚至列表,但是函数的总和是多少?由于每个函数的返回值都是一个数字,因此您可以有意义地添加(或减去)它们:

variance() + stdev()

通常我们将昂贵函数调用的返回值存储到一个变量一次,然后使用该变量而不是重新运行函数的所有操作。在 python 中,您通过使用= 运算符将对象(如返回值)绑定到名称来存储变量。你可以这样做:

s = stdev()
print(s)
...
v = variance()
print(v)
...
# Use v + s in an expression instead of variance + stdev

【讨论】:

    猜你喜欢
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    相关资源
    最近更新 更多