朱莉娅中的快速apply_along_axis等效项

Han*_*her 1 julia

朱莉娅有等于numpy apply_along_axis()(或R apply())的东西吗?我有一个3D数组,我想将自定义函数应用于尺寸为1和2的每对坐标。结果应为2D数组。

显然,我可以在第一维和第二维上进行两个嵌套的for循环迭代,然后重塑形状,但是我担心性能。

这个例子产生了我想要的输出(我知道这对于来说是没有意义的sum()。这里只是一个虚拟对象:

test = reshape(collect(1:250), 5, 10, 5)

a=[]

for(i in 1:5)
    for(j in 1:10)
        push!(a,sum(test[i,j,:]))
    end
end

println(reshape(a, 5,10))
Run Code Online (Sandbox Code Playgroud)

对更快版本有什么建议吗?

干杯

tho*_*oly 5

朱莉娅(Julia)具有mapslices应做的功能。但是请记住,Julia与您可能知道的其他语言不同:库函数不一定比您自己的代码快,因为它们的编写通用性可能比您实际需要的高,并且在Julia循环中速度很快。因此,很可能只写出循环会更快。

也就是说,有两个技巧:

  • 阅读手册的性能提示部分。由此,您将学会将所有内容放入函数中,并且不要使用像这样的无类型数组a = []
  • slicesub功能可避免数据的副本。