import numpy as np import random from scipy import stats import pandas as pd import matplotlib.pyplot as plt np.random.seed(1) a=[] for p in range(1,11): k=8 n=100 Sigma = [[1,0.6+0.04p],[0.6+0.04p,1]] res1 = [] for i in range(1,1001): data=np.random.multivariate_normal(np.zeros(2), Sigma, n) X_data=data[:,0] Y_data=data[:,1] Sx=sorted(X_data) Sy=sorted(Y_data) inter_x=np.arange(min(X_data),max(X_data)+(max(X_data)-min(X_data))/k, (max(X_data)-min(X_data))/k) inter_y=np.arange(min(Y_data),max(Y_data)+(max(Y_data)-min(Y_data))/k, (max(Y_data)-min(Y_data))/k) left_inter_x=np.dot(np.ones((n,1)),inter_x[0:k].reshape(1,k)) right_inter_x=np.dot(np.ones((n,1)),inter_x[1:(k+1)].reshape(1,k)) left_inter_y=np.dot(np.ones((n,1)),inter_y[0:k].reshape(1,k)) right_inter_y=np.dot(np.ones((n,1)),inter_y[1:(k+1)].reshape(1,k)) Data1=np.dot(X_data.reshape(n,1), np.ones((1,k))) Data2=np.dot(Y_data.reshape(n,1), np.ones((1,k))) frequx=(left_inter_x<=Data1)(Data1<right_inter_x) frequy=(left_inter_y<=Data2)(Data2<right_inter_y) frequxy = np.dot(frequx.astype(int).T,frequy.astype(int)) pi=np.sum(frequxy,axis=0)/n pj=np.sum(frequxy,axis=1)/n pij=np.dot(pi.reshape(k,1),pj.reshape(1,k)) A=(frequxy-npij)**2/(npij) A[np.isnan(A)]=0 A[np.isinf(A)]=0 stat1=np.sum(A) res1.append(int(stat1>stats.chi2.ppf(0.95,(k-1)**2))) a[p]=np.mean(res1) plt.plot(a)有哪些错误
时间: 2023-06-23 15:08:54 浏览: 208
import pandas as pd.docx
该代码存在以下错误:
1. 缺少函数声明和主程序入口。
2. 行首缺少空格,不符合 Python 的 PEP8 代码规范。
3. 第一行导入 numpy 库和 random 库,但是代码中没有使用 random 库,可以删除。
4. 缺少对 scipy 库和 pandas 库的导入。
5. 第5行代码中的 Sigma 变量没有正确的缩进,应该缩进4个空格。
6. 第6行代码中的 res1 变量没有正确的缩进,应该缩进4个空格。
7. 第7行代码中应该在 import 后面加上空格。
8. 第9行代码中的 np.random.seed(1) 应该缩进4个空格。
9. 第11行代码中的 a=[] 应该缩进4个空格。
10. 第13行代码中的 p 变量没有正确的缩进,应该缩进4个空格。
11. 第14行代码中的 n 变量没有正确的缩进,应该缩进4个空格。
12. 第15行代码中的 Sigma 变量应该缩进4个空格。
13. 第16-30行代码是一个 for 循环,缩进不正确,应该缩进4个空格。
14. 第17-29行代码中的变量应该缩进8个空格。
15. 第18-20行代码中的 X_data, Y_data, Sx, Sy, inter_x, inter_y 等变量没有正确的缩进,应该缩进8个空格。
16. 第21-24行代码中的 left_inter_x, right_inter_x, left_inter_y, right_inter_y 等变量没有正确的缩进,应该缩进8个空格。
17. 第26行代码中的 Data1, Data2 变量没有正确的缩进,应该缩进8个空格。
18. 第27-28行代码中的 frequx, frequy 变量没有正确的缩进,应该缩进8个空格。
19. 第29行代码中的 frequxy 变量没有正确的缩进,应该缩进8个空格。
20. 第30行代码中的 pi, pj, pij, A 变量没有正确的缩进,应该缩进8个空格。
21. 第32行代码中的 np.isnan(A) 和 np.isinf(A) 应该缩进8个空格。
22. 第34行代码中的 a[p]=np.mean(res1) 应该缩进4个空格。
23. 最后一行代码中的 plt.plot(a) 应该缩进4个空格。
建议修改后的代码如下所示:
```python
import numpy as np
from scipy import stats
import pandas as pd
import matplotlib.pyplot as plt
def main():
np.random.seed(1)
a = [0] * 11
for p in range(1, 11):
k = 8
n = 100
Sigma = [[1, 0.6 + 0.04 * p], [0.6 + 0.04 * p, 1]]
res1 = []
for i in range(1, 1001):
data = np.random.multivariate_normal(np.zeros(2), Sigma, n)
X_data = data[:, 0]
Y_data = data[:, 1]
Sx = sorted(X_data)
Sy = sorted(Y_data)
inter_x = np.arange(min(X_data), max(X_data) + (max(X_data) - min(X_data)) / k, (max(X_data) - min(
X_data)) / k)
inter_y = np.arange(min(Y_data), max(Y_data) + (max(Y_data) - min(Y_data)) / k, (max(Y_data) - min(
Y_data)) / k)
left_inter_x = np.dot(np.ones((n, 1)), inter_x[0:k].reshape(1, k))
right_inter_x = np.dot(np.ones((n, 1)), inter_x[1:(k + 1)].reshape(1, k))
left_inter_y = np.dot(np.ones((n, 1)), inter_y[0:k].reshape(1, k))
right_inter_y = np.dot(np.ones((n, 1)), inter_y[1:(k + 1)].reshape(1, k))
Data1 = np.dot(X_data.reshape(n, 1), np.ones((1, k)))
Data2 = np.dot(Y_data.reshape(n, 1), np.ones((1, k)))
frequx = (left_inter_x <= Data1) * (Data1 < right_inter_x)
frequy = (left_inter_y <= Data2) * (Data2 < right_inter_y)
frequxy = np.dot(frequx.astype(int).T, frequy.astype(int))
pi = np.sum(frequxy, axis=0) / n
pj = np.sum(frequxy, axis=1) / n
pij = np.dot(pi.reshape(k, 1), pj.reshape(1, k))
npij = n * pij
A = (frequxy - npij) ** 2 / (npij)
A[np.isnan(A)] = 0
A[np.isinf(A)] = 0
stat1 = np.sum(A)
res1.append(int(stat1 > stats.chi2.ppf(0.95, (k - 1) ** 2)))
a[p] = np.mean(res1)
plt.plot(a)
if __name__ == '__main__':
main()
```
阅读全文