【问题标题】:sliding window median of correlations of a matrix矩阵相关性的滑动窗口中位数
【发布时间】:2013-08-21 13:36:25
【问题描述】:

问题部分:

  1. 有没有“julia方式”来实现滑动窗口?
  2. julia 需要什么来忽略NaNs?

有一个包含 264 个记录点(行)和 200 个时间点(列)的矩阵。我想在 10 个样本窗口中获得每个记录点与其他点的中值相关性。

我已经通过创建 3d 264x264x10 矩阵尝试了 matlab 方式 (tm),其中第三个暗淡是该窗口的相关性。在 matlab 中,我会做 median(cors,3) 就像 julia 可以做 mean(cors,3) 一样。但是中位数对此没有支持。看起来 mapslices(median,cors,3) 可能是我想要的,但有些记录点有 NaN。在 R 中,我可能会查看 na.omit()na.ignore=T 之类的函数选项,但对于 julia,我看不到这一点。

#oned=readdlm("10152_20111123_preproc_torque.1D")
oned=rand(200,264); oned[:,3]=NaN; oned[:,200]=NaN
windows=10
samplesPerWindow=size(oned,1)/windows
cors=zeros(size(oned,2),size(oned,2),windows)
for i=1:windows
 startat=(i-1)*windows+1
 endat=i*windows
 corofsamples=cor(oned[startat:i*windows,:])
 cors[:,:,i]= corofsamples
end
med = mapslices(median,cors,3) # fail b/c NaN

【问题讨论】:

    标签: median sliding-window julia


    【解决方案1】:

    这是一种方法,它使用函数来封装任务的各个部分。通过创建忽略NaN 的中值函数的专用版本,可以更轻松地使用mapslices

    function findcors(oned, windows)
        samplesPerWindow = size(oned, 1) / windows
    
        cors = zeros(size(oned, 2), size(oned, 2), windows)
    
        for i = 1:windows
            startat = (i - 1) * samplesPerWindow + 1
            endat = i * samplesPerWindow
            corofsamples = cor(oned[startat:endat, :])
            cors[:, :, i] = corofsamples
        end
    
        return cors
    end
    
    function nanmedian(A)
        cleanA = A[isfinite(A)]
        if isempty(cleanA)
            NaN
        else
            return median(cleanA)
        end
    end
    
    oned = rand(200, 264)
    oned[:, 3] = NaN
    oned[:, 200] = NaN
    
    cors = findcors(oned, 10)
    
    med = mapslices(nanmedian, cors, 3)
    

    我相信您的原始代码在主循环中使用了错误的窗口长度。希望我已经解决了这个问题。

    DataFrames 包提供了一个NA 值和忽略NA 的工具,但仍需要清理其median 函数以利用这些工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-20
      • 2021-03-01
      • 2017-12-27
      • 2016-08-16
      • 2011-12-20
      • 2019-02-09
      • 2014-08-14
      • 1970-01-01
      相关资源
      最近更新 更多