2013-05-28 24 views
1

我想編寫一些代碼來幫助我評估一些適合的功能。我有一個3D矩陣。 z維度適合矩陣中第i,j點的一些數據。我想通過比較點i,j與其最近鄰居的擬合(在x,y維度上)來評估這個擬合是否合適。如果鄰居的配合與那個時候的配合相似,那麼我想保持健康。我希望這是有道理的。n的x,y滾動窗口的z dim的平均相關性

有什麼可以歸結的是:是否有一個很好的方法在x,y維上有一個滾動窗口,用於計算窗口中心點z dim中的Pearson r與窗口中所有其他點的距離,取平均值(甚至r大於某個常數的點數)。

我只能想當前如何以一種非常長期的低效率的方式來做到這一點。對於一些背景資料,我用一個fourier系列適合這些數據。最終,我想用這種技術來評估在每個點上傅立葉擬閤中使用的最小波數。

在此先感謝 尼爾

回答

0

這是我的解決方案,但它不是很有效。 (順便說一下,是數據的另一個方面我沒有刻意告訴你有關的問題。有沒有人得到了更有效的方式來做到這一點有什麼建議?

再次感謝

import numpy as np 
from scipy.stats import pearsonr 
from bottleneck import nanmean 

def calc_corr_of_neighbours(data, win_shape): 
    rs = np.empty(data.shape[1:]) 
    thisrs = np.empty(win_shape) 
    win_data = np.empty(win_shape) 
    dA = int(win_shape[0]/2) 
    dB = int(win_shape[1]/2) 
    maxA = data.shape[2] 
    maxB = data.shape[3] 

    for i in np.ndindex(rs.shape): 
     stA = max(i[1]-dA, 0) 
     endA = min(i[1]+dA, maxA) 
     stB = max(i[2]-dB, 0) 
     endB = min(i[2]+dB, maxB) 

     win_data = data[:, i[0], stA:endA, stB:endB] 

     thisrs.fill(np.NaN) 
     for j in np.ndindex(win_data.shape[1:]): 
      thisrs[j] = pearsonr(data[:, i[0], i[1], i[2]], win_data[:, j[0], j[1]])[0] 

     rs[i] = nanmean(thisrs) 

    return rs 
相關問題