簡體   English   中英

在python中找到最大r值** 2

[英]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.linregresstest_itest_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_itest_i + 10 ,如下所示:

linregress(test[test_i:test_i+window, 0], test[test_i:test_i+window, 1])

實際上,您不必為linregress拆分xy部分:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM