我有一个(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
之间查看并将所有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
答案 0 :(得分:0)
手动实现此方法的方法是将数组的第一维从test_i
切割为test_i + 10
,如下所示:
linregress(test[test_i:test_i+window, 0], test[test_i:test_i+window, 1])
实际上,您不必拆分x
的{{1}}和y
部分:
linregress
您还可以通过在循环中构建列表来保存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