2013-05-28 1 views
1

몇 가지 적합한 방법을 평가하는 데 도움이되는 코드를 작성하고 싶습니다. 3D 매트릭스가 있습니다. z 차원은 행렬의 점 i, j에있는 일부 데이터에 적합합니다. 이 피팅이 점 i, j에서의 피트를 (x, y 차원에서) 가장 가까운 이웃들의 피트와 비교하여 좋은지 평가하고 싶습니다. 이웃 사람의 적합이 저 점에 적합 하 경우에 나는 적합을 지키고 싶으면. 나는 그것이 의미가 있기를 바랍니다.numpy의 x, y 롤링 윈도우의 z dim의 평균 상관 관계

다음과 같이 요약 할 수 있습니다. 창의 중심점의 z 축에서 Pearson의 r을 계산하는 x, y 차원을 가로 지르는 롤링 창을 창의 모든 다른 점에 적용하는 좋은 방법이 있습니까? 평균 (또는 어떤 상수보다 큰 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 
관련 문제