python - 列表索引超出范围 - 卡方检验
问题描述
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
解决方案
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 )
推荐阅读
- nestjs - TypeORM 中我的多对多关系中的一个错误
- javascript - 在 Firestore 限制中使用变量
- javascript - Sequelize 使用 AND 和 OR 子句构建动态 where 子句条件
- javascript - 返回的变量没有从 API 调用中获得正确的值
- java - 无法通过 Redmi9 和联想平板电脑的蓝牙低功耗连接
- java - 如何在 android studio 中启用/禁用 Aeroplan 模式或启用/禁用移动数据
- javascript - React Native:_chalk.constructor 不是构造函数
- amazon-web-services - 共享我的 lightsail 实例公共静态 IP 是否安全
- python - 在链表的索引处插入
- javascript - 为电子应用程序创建图标的电子生成器错误