Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia等效于movmean(数组、窗口、dims)?_Julia - Fatal编程技术网

Julia等效于movmean(数组、窗口、dims)?

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

我在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,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)

谢谢,这是一个很好的方法,但是当你想使用更大的窗口时,它会变得很困难。