【发布时间】:2015-04-24 01:16:05
【问题描述】:
我正在寻找一种在 Julia 中计算多维数组导数的有效方法。准确地说,我想在 Julia 中有一个相当于 numpy.gradient 的东西。但是,Julia 函数 diff :
- 仅适用于二维数组
- 沿微分维度将数组大小减一
扩展 Julia 的 diff 的定义很简单,因此它可以在 3 维数组上工作,例如与
function diff3D(A::Array, dim::Integer)
if dim == 1
[A[i+1,j,k] - A[i,j,k] for i=1:size(A,1)-1, j=1:size(A,2), k=1:size(A,3)]
elseif dim == 2
[A[i,j+1,k] - A[i,j,k] for i=1:size(A,1), j=1:size(A,2)-1, k=1:size(A,3)]
elseif dim == 3
[A[i,j,k+1] - A[i,j,k] for i=1:size(A,1), j=1:size(A,2), k=1:size(A,3)-1]
else
throw(ArgumentError("dimension dim must be 1, 2, or 3 got $dim"))
end
end
适用于例如
a = [i*j*k for i in 1:10, j in 1:10, k in 1:20]
但是,无法扩展到任意维度,并且不考虑边界,因此梯度可以具有与原始数组相同的维度。
我有一些想法可以在 Julia 中实现类似 numpy 的渐变,但我担心它们会非常缓慢和丑陋,因此我的问题是:在 Julia 中是否有一种我错过的规范方法来做到这一点?如果没有,什么是最佳的?
谢谢。
【问题讨论】:
-
Julia 1.1+ 现在支持数组维度 >2 的 diff()。 docs.julialang.org/en/v1/base/arrays/#Base.diff
标签: multidimensional-array julia numerical-methods