我正在尝试对某些包含NaN的数据进行chi ^ 2测试。这是MWE:
$django-admin runserver
输出
from scipy.stats import chisquare as chi2
import numpy as np
x = [16, 18, 16, 14, 12, 12]
chi2(x)
但是
Power_divergenceResult(statistic=2.0, pvalue=0.8491450360846096)
给予
x[-1] = np.nan
chi2(x)
通过以下方式应用蒙版
Power_divergenceResult(statistic=nan, pvalue=nan)
结果
mask = ~np.isnan(x)
chi2(x[mask])
我认为(希望)实际数据中的NaN是导致此问题的原因。 TypeError Traceback (most recent call last)
<ipython-input-13-3c009fd66f63> in <module>
----> 1 chi2(x[mask])
TypeError: only integer scalar arrays can be converted to a scalar index
是否具有处理NaN的内置方式,例如scipy.stats.chisquare
对其spearmanr
的处理方式吗?如果没有,与他们打交道的最好方法是什么?
答案 0 :(得分:0)
x
是一个列表;布尔数组(就此而言,任何数组)都不能用于索引列表。
In [244]: x = [16, 18, 16, 14, 12, 12]
In [245]: x[-1] = np.nan
In [246]: mask = ~np.isnan(x)
In [247]: x[mask]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-247-fee3ce9a3be1> in <module>
----> 1 x[mask]
TypeError: only integer scalar arrays can be converted to a scalar index
In [248]: mask
Out[248]: array([ True, True, True, True, True, False])
该错误发生在调用chi2
之前。
现在,如果x
是ndarray
,它可能就可以工作:)
In [249]: x = np.array([16, 18, 16, 14, 12, 12])
In [250]: x[mask]
Out[250]: array([16, 18, 16, 14, 12])