将 scipy.stats.chisquare 与屏蔽数组一起使用
Using scipy.stats.chisquare with masked arrays
我需要计算一组数组(observed
和 expected
)的卡方拟合。数组大小相同,但是 expected
的某些元素是 None
因为我不知道期望值。
我想使用 scipy.stats.chisquare
来计算数据的卡方拟合。由于我的一些数据是 None
,我收到错误:
TypeError: unsupported operand type(s) for -: 'float' and 'NoneType'
我试图通过只包含不是 None
的数据来解决这个问题
import numpy.ma
import scipy.stats
expected = [None, 2,3,4]
observed = [1,2.2,3.3,4.4]
expMasked = numpy.ma.masked_where(expected == None, expected)
obsMasked = numpy.ma.masked_where(expected == None, observed)
chi2 = scipy.stats.chisquare(obsMasked, f_exp=expMasked)
这只是给我同样的错误。
如何对我的数据使用 scipy.stats.chisquare
函数?
虽然 numpy.ma.masked_where(expected == None, expected)
实际上会掩盖 expected
出现 None
似乎合乎逻辑,但 numpy.ma
无法识别 None
与 expected
,因此 None
必须转换为 np.array
。您的代码将像这样工作
import numpy as np
import scipy.stats
expected = [None, 2,3,4]
observed = [1,2.2,3.3,4.4]
expMasked = np.ma.masked_where(expected == np.array(None), expected)
obsMasked = np.ma.masked_where(observed == np.array(None), observed)
expMasked[expMasked.mask] = (VALUE YOU WANT MASKED VALUES TO BE REPLACED WITH)
obsMasked[obsMasked.mask] = (VALUE YOU WANT MASKED VALUES TO BE REPLACED WITH)
chi2 = scipy.stats.chisquare(np.array(obsMasked), f_exp=np.array(expMasked))
我需要计算一组数组(observed
和 expected
)的卡方拟合。数组大小相同,但是 expected
的某些元素是 None
因为我不知道期望值。
我想使用 scipy.stats.chisquare
来计算数据的卡方拟合。由于我的一些数据是 None
,我收到错误:
TypeError: unsupported operand type(s) for -: 'float' and 'NoneType'
我试图通过只包含不是 None
import numpy.ma
import scipy.stats
expected = [None, 2,3,4]
observed = [1,2.2,3.3,4.4]
expMasked = numpy.ma.masked_where(expected == None, expected)
obsMasked = numpy.ma.masked_where(expected == None, observed)
chi2 = scipy.stats.chisquare(obsMasked, f_exp=expMasked)
这只是给我同样的错误。
如何对我的数据使用 scipy.stats.chisquare
函数?
虽然 numpy.ma.masked_where(expected == None, expected)
实际上会掩盖 expected
出现 None
似乎合乎逻辑,但 numpy.ma
无法识别 None
与 expected
,因此 None
必须转换为 np.array
。您的代码将像这样工作
import numpy as np
import scipy.stats
expected = [None, 2,3,4]
observed = [1,2.2,3.3,4.4]
expMasked = np.ma.masked_where(expected == np.array(None), expected)
obsMasked = np.ma.masked_where(observed == np.array(None), observed)
expMasked[expMasked.mask] = (VALUE YOU WANT MASKED VALUES TO BE REPLACED WITH)
obsMasked[obsMasked.mask] = (VALUE YOU WANT MASKED VALUES TO BE REPLACED WITH)
chi2 = scipy.stats.chisquare(np.array(obsMasked), f_exp=np.array(expMasked))