[英]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.