Julia等效于movmean(数组、窗口、dims)?
我在linux机器上使用julia 0.7.0、NCDatasets.jl和Images.jl来分析大约80GB的数据集。我没有加载很多变量,第一步是做matlab的等效Julia等效于movmean(数组、窗口、dims)?,julia,Julia,我在linux机器上使用julia 0.7.0、NCDatasets.jl和Images.jl来分析大约80GB的数据集。我没有加载很多变量,第一步是做matlab的等效 a = moveman(movemean(movemean(array,window,1),window,2),window,4)) 其中数组是(256256,80600)浮点数组。为此,我试着说: filtered = imfilter(array, centered(ones(window_h,window_h,1,wi
a = moveman(movemean(movemean(array,window,1),window,2),window,4))
其中数组是(256256,80600)浮点数组。为此,我试着说:
filtered = imfilter(array, centered(ones(window_h,window_h,1,window_t)/(window_t*window_h*window_h)),Inner())
然而,这会导致TB的分配,最终会占用我所有的内存并花费很长时间。与我的julia行相比,matlab行运行得很好,占用的时间也不多,这表明我正在以非最佳方式做一些事情
有人能提供一些见解吗?不太熟悉matlab,我猜这是移动平均值 然后它是线性的,要做movemean(movemean,movemean…) 你可以计算一个等式,比如 (3*阵列[current]+3*阵列[current-1]+2*阵列[current-2])/8
然后通过数组回答我自己的问题,基于在的讨论:我继续使用Images包,特别是ImageFiltering,方法如下。 首先,我定义用于平滑的内核。 这个内核将通过计算它和我们正在过滤的数组之间的相关性来使用 使用factores内核的不同之处在于,每个过滤器将分别应用,这将改变从 窗口\u h x窗口\u h x窗口\u t 到 窗口h+窗口h+窗口t 正如在报告中所解释的那样 请注意,内核在第三维中使用[1.0],因为我的数组是一个4维数组,并且我在前二维和第四维上进行平滑处理
using ImageFiltering
function kernel4d_2(window_h,window_t)
kernel_h = ones(window_h)/window_h
kernel_t = ones(window_t)/window_t
return kernelfactors((kernel_h, kernel_h, [1.0], kernel_t))
end
然后我定义了一个函数,将这个内核作为过滤器应用,并返回过滤后的数组
function filter_array(array,window_x,window_t)
filtered = imfilter(array, kernel4d_2(window_x,window_t))
end
这允许将阵列筛选为:
filtered = filter_array(unfiltered,window_x,window_t)
谢谢,这是一个很好的方法,但是当你想使用更大的窗口时,它会变得很困难。