Python 以numpy为单位的x,y滚动窗口z-dim的平均相关性

Python 以numpy为单位的x,y滚动窗口z-dim的平均相关性,python,matrix,numpy,scipy,correlation,Python,Matrix,Numpy,Scipy,Correlation,我想写一些代码来帮助我评估一些适合度有多好。我有一个3D矩阵。z维度与矩阵点i,j处的某些数据相匹配。我想通过比较点I,j处的拟合与其最近邻点(x,y维度)的拟合来评估该拟合是否良好。如果邻居们的身体状况与当时的相似,那么我想保持健康。我希望这是有道理的 归结起来就是:有没有一种好的方法可以在x,y维度上设置一个滚动窗口,计算窗口中心点到窗口中所有其他点的z维度上的Pearson's r,并取平均值(甚至是r大于某个常数的点的数量) 目前,我只能以一种非常冗长而低效的方式来思考如何做到这一点。对

我想写一些代码来帮助我评估一些适合度有多好。我有一个3D矩阵。z维度与矩阵点i,j处的某些数据相匹配。我想通过比较点I,j处的拟合与其最近邻点(x,y维度)的拟合来评估该拟合是否良好。如果邻居们的身体状况与当时的相似,那么我想保持健康。我希望这是有道理的

归结起来就是:有没有一种好的方法可以在x,y维度上设置一个滚动窗口,计算窗口中心点到窗口中所有其他点的z维度上的Pearson's r,并取平均值(甚至是r大于某个常数的点的数量)

目前,我只能以一种非常冗长而低效的方式来思考如何做到这一点。对于一些背景信息,我用傅里叶级数拟合这些数据。最终,我想用这项技术来评估在每个点的傅里叶拟合中使用的最小波数

提前谢谢
尼尔这是我的解决方案,但效率不高。(顺便问一下,这是我在问题中没有告诉你的数据的另一个方面。有人对更有效的方法有什么建议吗

再次感谢

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