Julia 使用向量的每个元素对向量的每个元素执行计算的简单方法

Julia 使用向量的每个元素对向量的每个元素执行计算的简单方法,julia,sapply,Julia,Sapply,例如,对于向量的每个元素,我想计算与向量的其他元素的残差之和。这适用于一个元素: a = [1, 2, 5, 7, 8, 22] f(x) = sum(abs.(x .- a)) f(2) Out: 35 但如果使用map()将此函数应用于所有元素,则返回错误: map(a, f) Out: "MethodError: no method matching iterate(::typeof(f))" 在R中,使用sapply()很容易获得: 在Julia中是否有同样优雅的

例如,对于向量的每个元素,我想计算与向量的其他元素的残差之和。这适用于一个元素:

a = [1, 2, 5, 7, 8, 22]
f(x) = sum(abs.(x .- a))
f(2)
Out: 35
但如果使用map()将此函数应用于所有元素,则返回错误:

map(a, f)
Out: "MethodError: no method matching iterate(::typeof(f))"
在R中,使用sapply()很容易获得:


在Julia中是否有同样优雅的方法来实现这一点?

函数
map
将应用于集合的函数作为其第一个参数。也就是说,你可以写作

map(f, a)

只需在
f
上矢量化即可:

julia> f.(a)
6-element Array{Int64,1}:
 39
 35
 29
 29
 31
 87

请注意,为了更接近您的R语法,
map()
(通常是julia)允许您在map调用之后指定一个匿名函数,该函数用作map的第一个参数,因此:

julia> map(a) do x
       sum(abs.(x .- a))
       end
6-element Array{Int64,1}:
 39
 35
 29
 29
 31
 87

总结一下下面的答案:在朱莉娅身上有一种同样优雅的方式可以做到这一点,但也有一种更优雅的方式:)
julia> map(a) do x
       sum(abs.(x .- a))
       end
6-element Array{Int64,1}:
 39
 35
 29
 29
 31
 87