[英]Find max r-value**2 in python
我有一个(x,y)数据集,我想为每10个元素计算r_value**2
(所以在元素0和9之间,在1和10之间,...,在n-10和n之间)。
理想情况下,代码应给出r_value**2_max
并将所有r
保存在列表中。 我做了一个循环,但是不知道如何告诉stats.linregress
在test_i
和test_i+10
之间test_i
并将所有r-values**2
保存在列表中。
到目前为止,我有这个:
import matplotlib.pyplot as plt
from scipy import stats
import numpy as np
import csv
path = '/storage/.../01_python_in/'
test = np.loadtxt(path + 'sample_data.txt', skiprows=0)
test_min = 0
test_max = len(test)
for test_i in range(test_min, test_max-10):
slope, intercept, r_value, p_value, std_err = stats.linregress(test[:, 0], test[:, 1])
print 'i:', test_i, 'r**2:', r_value**2
手动实现此方法的方法是将数组的第一维从test_i
为test_i + 10
,如下所示:
linregress(test[test_i:test_i+window, 0], test[test_i:test_i+window, 1])
实际上,您不必为linregress
拆分x
和y
部分:
linregress(test[test_i:test_i+window])
您还可以通过在循环中构建列表来保存r_values
。 这里显示了上述内容:
window = 10
r_values = []
for test_i in range(len(test)-window):
slope, intercept, r_value, p_value, std_err = \
stats.linregress(test[test_i:test_i + window])
r_values.append(r_value)
print 'i:', test_i, 'r**2:', r_value**2
实际上,对于列表理解来说足够简单:
r_values = [stats.linregress(test[i:i+w]).rvalue for i in range(len(test)-w)]
您可以使用以下方法获得平方:
r_values = np.asarray(r_values)
r_values2 = r_values**2
和最大i
与:
max_i = np.argmax(r_values2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.