1

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

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

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

提前感谢尼尔

4

1 回答 1

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
于 2013-05-29T09:09:58.570 回答