TypeError: "'numpy.float64' object is not callable" when using scipy.stats.bootstrap
TypeError: "'numpy.float64' object is not callable" when using scipy.stats.bootstrap
我想应用 scipy.stats.bootstrap
的统计自举方法。
在下面的代码中,我将两个不同的 .txt 文件加载到 Python。每个文件都包含一列数值(浮点数)。我想计算每个文件的变异系数 (CV),并比较它们在 CV 中的差异是否具有统计显着性。这就是我使用引导程序的原因。
完整代码如下:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import scipy as sp
from scipy import stats
# Coefficient of variation
Core_values = np.loadtxt(f"pathtofile/file1.txt", comments=None, delimiter=None, converters=None,
skiprows=0, usecols=0,unpack=False, ndmin=0, encoding=None, max_rows=None, like=None)
Periphery_values = np.loadtxt(f"pathtofile/file2.txt", comments=None, delimiter=None, converters=None,
skiprows=0, usecols=0, unpack=False, ndmin=0, encoding=None, max_rows=None, like=None)
Results = sp.stats.bootstrap((Core_values, Periphery_values), sp.stats.variation((Core_values, Periphery_values), axis=None), vectorized=False, paired=True, confidence_level=0.95, n_resamples=20000)
print(Results)
当我只应用计算两个文件的 CV 的代码如下时:
Results = sp.stats.variation((Core_values, Periphery_values), axis=None)
print(Results)
Python 给出了正确的结果,即来自两个输入文件的值的一个 CV 值。但是,如完整代码所示,在引导代码中实现 sp.stats.variation((Core_values, Periphery_values), axis=None)
时,我收到以下错误消息:TypeError: 'numpy.float64' object is not callable
因此我认为我的错误是我将两个样本(Core_values 和 Periphery_values)都提供给了
Results = sp.stats.bootstrap((Core_values, Periphery_values), sp.stats.variation...
我无法弄清楚正确的实现会告诉 Python 我想使用这两个样本进行引导以避免出现错误消息。
答案在 scipy.stats.bootstrap
、statistic
的第二个参数的文档中:“统计信息必须是一个 callable [强调] 接受len(data)
样本作为单独的参数 [其中 data
是 bootstrap
的第一个参数] 和 returns 结果统计。如果设置 vectorized
True
, statistic 还必须接受关键字参数 axis 并进行矢量化以计算沿提供的轴的统计信息。"
“可调用”是一个函数或类似函数的东西。您作为 statistic
参数提供的内容,sp.stats.variation((Core_values, Periphery_values), axis=None)
两者都不是。它只是一个数字(特别是浮点值),因此出现错误“TypeError: numpy.float64
object is not callable`.
你可能想要作为statistic
参数传递的是可能这样的东西:lambda c,v: sp.stats.variation((c,v), axis=None)
. lambda 是 可调用的。请注意,根据 statistic
的文档,lambda 中的参数数量与 bootstrap
的第一个参数的长度相同,即元组 (Core_values, Periphery_values)
。然而,这个特定的 lambda 可能不会做你真正想要的。 (它是否超出了这个特定问题的范围。)
我想应用 scipy.stats.bootstrap
的统计自举方法。
在下面的代码中,我将两个不同的 .txt 文件加载到 Python。每个文件都包含一列数值(浮点数)。我想计算每个文件的变异系数 (CV),并比较它们在 CV 中的差异是否具有统计显着性。这就是我使用引导程序的原因。
完整代码如下:
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import scipy as sp
from scipy import stats
# Coefficient of variation
Core_values = np.loadtxt(f"pathtofile/file1.txt", comments=None, delimiter=None, converters=None,
skiprows=0, usecols=0,unpack=False, ndmin=0, encoding=None, max_rows=None, like=None)
Periphery_values = np.loadtxt(f"pathtofile/file2.txt", comments=None, delimiter=None, converters=None,
skiprows=0, usecols=0, unpack=False, ndmin=0, encoding=None, max_rows=None, like=None)
Results = sp.stats.bootstrap((Core_values, Periphery_values), sp.stats.variation((Core_values, Periphery_values), axis=None), vectorized=False, paired=True, confidence_level=0.95, n_resamples=20000)
print(Results)
当我只应用计算两个文件的 CV 的代码如下时:
Results = sp.stats.variation((Core_values, Periphery_values), axis=None)
print(Results)
Python 给出了正确的结果,即来自两个输入文件的值的一个 CV 值。但是,如完整代码所示,在引导代码中实现 sp.stats.variation((Core_values, Periphery_values), axis=None)
时,我收到以下错误消息:TypeError: 'numpy.float64' object is not callable
因此我认为我的错误是我将两个样本(Core_values 和 Periphery_values)都提供给了
Results = sp.stats.bootstrap((Core_values, Periphery_values), sp.stats.variation...
我无法弄清楚正确的实现会告诉 Python 我想使用这两个样本进行引导以避免出现错误消息。
答案在 scipy.stats.bootstrap
、statistic
的第二个参数的文档中:“统计信息必须是一个 callable [强调] 接受len(data)
样本作为单独的参数 [其中 data
是 bootstrap
的第一个参数] 和 returns 结果统计。如果设置 vectorized
True
, statistic 还必须接受关键字参数 axis 并进行矢量化以计算沿提供的轴的统计信息。"
“可调用”是一个函数或类似函数的东西。您作为 statistic
参数提供的内容,sp.stats.variation((Core_values, Periphery_values), axis=None)
两者都不是。它只是一个数字(特别是浮点值),因此出现错误“TypeError: numpy.float64
object is not callable`.
你可能想要作为statistic
参数传递的是可能这样的东西:lambda c,v: sp.stats.variation((c,v), axis=None)
. lambda 是 可调用的。请注意,根据 statistic
的文档,lambda 中的参数数量与 bootstrap
的第一个参数的长度相同,即元组 (Core_values, Periphery_values)
。然而,这个特定的 lambda 可能不会做你真正想要的。 (它是否超出了这个特定问题的范围。)