2015-09-09 56 views
0

我在鏡像中有一個看起來像字母「L」的圖形,或者像這樣:___/ 圖形的第一部分的斜率爲+/- 0(但它是不是零!),我想定義圖表開始彎曲(斜率> 0)的確切點。在圖中找到斜坡的起點

path = '/storage/.../01_python_in/' 
test = np.loadtxt(path+'sample_data.txt', skiprows=0) 

window = 10 
slope_value = [] 
for j in range(len(test) - window): 
    slope, intercept, r_value, p_value, std_err = stats.linregress(test[j:j+window]) 

    if slope > 0.2: 
     slope_value.append(slope) 
     print slope 

    else: 
     slope_value.append(0) 

此工程確定,而我有兩個問題:

1)我的輸出是斜坡的陣列對於i + 10個元素。我怎樣才能知道第一個元素的索引是不是零,所以我可以讀出我的'測試'數據中的數據點(對不起,這是基本的,但我是一個python新手)? 2)我的實際數據看起來並不完美,因爲它包含一些噪聲,我的解決方案有兩個變量('窗口'和斜率> 0.2),我只能猜測(估計)。感謝您的幫助!

+0

鑑於該曲線不是直線(甚至在窗口內它只是一個近似值),那麼在窗口或整個數據集中使用樣條擬合來獲得函數怎麼樣?對初學者來說這可能有點複雜,這取決於你對項目的需求。 http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.interpolate.UnivariateSpline.html樣條對象有一個獲取衍生物的方法。 – amd

+0

您是否考慮過對數據進行反向工作? –

回答

0

(1)儘量next(i for i,v in enumerate(slope_value) if v > 0)描述here
(2)也許吧,我說你的解決方案的適用性取決於應用模型是否是一個適合你的數據,或這個過程可以產生你的數據,你可能需要經過一些試驗和錯誤來找到你的兩個參數(窗口)的最佳值長度和坡度閾值)。

0

嘗試列表理解。

如果列表slope_value與其他數據使用配對:

>>> slope_value = [0,0,0,0,0,1,2,2,3,4,5,6] 
>>> x = [1,2,3,4,5,6,7,8,9,10,11,12] 
>>> [X for (X,A) in sorted(zip(x,slope_value)) if A > 0][0] 
6 

否則,你可以找到第一個非零的指數,像這樣:

>>> [X for (X,A) in sorted(zip(range(len(slope_value)),slope_value)) if A > 0][0] 
5