使用此向量的每个元素对向量的每个元素执行计算的简单方法
A simple way to perform calculations for every element of the vector with each of elements of this vector
例如,对于一个向量的每个元素,我想计算与这个向量的其他元素的残差之和。这适用于一个元素:
a = [1, 2, 5, 7, 8, 22]
f(x) = sum(abs.(x .- a))
f(2)
Out: 35
但是如果使用 map() 将此函数应用于所有元素,Julia return 会出错:
map(a, f)
Out: "MethodError: no method matching iterate(::typeof(f))"
在 R 中,这很容易使用 sapply():
a = c(1, 2, 5, 7, 8, 22)
sapply(a, function(x) sum(abs(x - a)))
Out: 39 35 29 29 31 87
在 Julia 中是否有同样优雅的方法来做到这一点?
函数map
将应用于集合的函数作为第一个参数。 IE。你可以写
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
例如,对于一个向量的每个元素,我想计算与这个向量的其他元素的残差之和。这适用于一个元素:
a = [1, 2, 5, 7, 8, 22]
f(x) = sum(abs.(x .- a))
f(2)
Out: 35
但是如果使用 map() 将此函数应用于所有元素,Julia return 会出错:
map(a, f)
Out: "MethodError: no method matching iterate(::typeof(f))"
在 R 中,这很容易使用 sapply():
a = c(1, 2, 5, 7, 8, 22)
sapply(a, function(x) sum(abs(x - a)))
Out: 39 35 29 29 31 87
在 Julia 中是否有同样优雅的方法来做到这一点?
函数map
将应用于集合的函数作为第一个参数。 IE。你可以写
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