【问题标题】:average correlation of z dim of an x,y rolling window in numpynumpy中x,y滚动窗口的z dim的平均相关性
【发布时间】:2013-05-28 12:24:18
【问题描述】:

我想编写一些代码来帮助我评估一些拟合的好坏。我有一个 3D 矩阵。 z 维度适合矩阵的点 i、j 处的某些数据。我想通过将 i, j 点的拟合与其最近邻居的拟合(在 x,y 维度中)进行比较来评估这种拟合是否良好。如果邻居的配合与当时的配合相似,那么我想保持配合。我希望这是有道理的。

归结为:有没有一种好方法可以在 x,y 维度上创建一个滚动窗口,计算窗口中心点的 z dim 中的皮尔逊 r 到窗口中的所有其他点并取平均值(甚至是 r 大于某个常数的点数)。

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

提前致谢 尼尔

【问题讨论】:

    标签: python matrix numpy scipy correlation


    【解决方案1】:

    这是我的解决方案,但效率不高。 (顺便说一句,我没有在问题中告诉你数据的另一个维度。有没有人提出更有效的方法来做到这一点?

    再次感谢

    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
    

    【讨论】:

      猜你喜欢
      • 2021-12-05
      • 2013-02-26
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      • 2014-05-22
      • 2011-03-28
      • 2020-08-13
      相关资源
      最近更新 更多