首页 > 解决方案 > 列表索引超出范围 - 卡方检验

问题描述

enter code here我创建了 LCG 生成器,并且正在尝试对一致性进行卡方检验。

从生成器中,我选择 100 个随机数:

np.seterr(over='ignore')

a = np.uint32(1664525)
c = np.uint32(1013904223)
seed = np.uint32(1)

rng = LCG(seed, a, c)
q = [rng.next() for _ in range(0, 100)]
print(q)
data_set = q 

接下来我试着用这种方式做卡方:

def chi_square_uniformity_test():

chi_sq_value = 0.0
num_samples = 10000
degrees_of_freedom = num_samples - 1
data_set
observed_val = 1 

expected_val = num_samples/10

for observed_val in data_set:

    chi_sq_value += ( pow((expected_val - data_set[observed_val]), 2)/expected_val )

return chi_sq_value

它给出了以下错误-

IndexError                                Traceback (most recent call last)
<ipython-input-43-675902c0a85e> in <module>
----> 1 chi_square_uniformity_test()

<ipython-input-42-3960c5593af3> in chi_square_uniformity_test()
     30     for observed_val in data_set:
     31         #print "Observed value is: " + observed_val
---> 32         chi_sq_value += ( pow((expected_val - data_set[observed_val]), 2)/expected_val )
     33 
     34     # Coming out of this loop, we'll have a chi-squared test statistic

IndexError: list index out of range

标签: pythonpython-3.xrandomjupyter-notebook

解决方案


for observed_val in data_set:迭代 的单个元素data_set不是它们的索引,因此data_set[observed_val]尝试data_set使用的元素之一data_set进行索引,并且这样的索引可能不存在。

例如:

>>> for x in [1000]:
...  print(x)  # x == 1000
...  print([1000][x])  # index 1000 clearly doesn't exist
... 
1000
Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
IndexError: list index out of range

你根本不需要data_set[observed_val]这里。你可以做:

chi_sq_value += ( pow((expected_val - observed_val), 2)/expected_val )

推荐阅读