如何在Julia中巧妙地将一个参数应用于数组{Function,1}元素?

如何在Julia中巧妙地将一个参数应用于数组{Function,1}元素?,julia,elementwise-operations,Julia,Elementwise Operations,我知道Julia可以通过f.(x)将元素参数应用于函数 在v0.6中 现在,我将f定义为数组{函数,1} f1(x) = 3x f2(x) = 4x f = [f1, f2] x = 2 @assert isa(f, Array{Function,1}) == true # f.(x) is unavailable 我想像上面的语法一样将参数应用于元素函数,而不是使用map,[\u f(x)表示f中的f] 有人熟悉这个问题吗?您可以广播管道操作员(|>),例如 你必须注意如何定义x和f,在

我知道Julia可以通过f.(x)将元素参数应用于函数 在v0.6中

现在,我将f定义为数组{函数,1}

f1(x) = 3x
f2(x) = 4x
f = [f1,  f2]
x = 2
@assert isa(f,  Array{Function,1}) == true
# f.(x) is unavailable
我想像上面的语法一样将参数应用于元素函数,而不是使用
map
[\u f(x)表示f中的f]


有人熟悉这个问题吗?

您可以广播管道操作员(
|>
),例如


你必须注意如何定义x和f,在某些情况下你会失败。在最后一个f上应用的第一个x将失败

julia> 5 .|> [x->2x, x->7x]
2-element Array{Int64,1}:
 10
 35

julia> [2, 5] .|> [x->2x, x->7x]
2-element Array{Int64,1}:
  4
 35

julia> [2 5] .|> [x->2x, x->7x]
2-element Array{Int64,2}:
  4  10
 14  35

julia> [2 5] .|> [x->2x x->7x]
1×2 Array{Int64,2}:
4  35

julia> [2, 5] .|> [x->2x x->7x]
2×2 Array{Int64,2}:
 4  14
10  35

julia> [2 3 5] .|> [x->2x x->7x]
ERROR: DimensionMismatch("arrays could not be broadcast to a common")

julia> [2, 3, 5] .|> [x->2x, x->7x]
ERROR: DimensionMismatch("arrays could not be broadcast to a common")

julia> x = [1, 2, 3]; f = [x->2x, x->3x]; x .|> f
ERROR: DimensionMismatch("arrays could not be broadcast to a common")

还有一种可能性:

((f, x)->f(x)).([f1, f2], x)

是的,这很好地说明了Julia代码是多么优雅。您是否弄错了上一个示例中的第二个示例
size([2,3,5])=(3,1)size([x->2xx->7x])=(1,2)
返回数组的大小是(3,2)。它可以正常工作。我重新检查了广播,很多。是的,现在很好。
julia> 5 .|> [x->2x, x->7x]
2-element Array{Int64,1}:
 10
 35

julia> [2, 5] .|> [x->2x, x->7x]
2-element Array{Int64,1}:
  4
 35

julia> [2 5] .|> [x->2x, x->7x]
2-element Array{Int64,2}:
  4  10
 14  35

julia> [2 5] .|> [x->2x x->7x]
1×2 Array{Int64,2}:
4  35

julia> [2, 5] .|> [x->2x x->7x]
2×2 Array{Int64,2}:
 4  14
10  35

julia> [2 3 5] .|> [x->2x x->7x]
ERROR: DimensionMismatch("arrays could not be broadcast to a common")

julia> [2, 3, 5] .|> [x->2x, x->7x]
ERROR: DimensionMismatch("arrays could not be broadcast to a common")

julia> x = [1, 2, 3]; f = [x->2x, x->3x]; x .|> f
ERROR: DimensionMismatch("arrays could not be broadcast to a common")
((f, x)->f(x)).([f1, f2], x)