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

时间:2017-08-14 04:01:26

标签: julia elementwise-operations

我理解Julia可以通过f将元素方式参数应用于函数。(x) 在v0.6

x = [1, 2, 3]
f = x->3x
@assert f.(x) = [3, 6, 9]

现在,我将f定义为Array {Function,1}。

f1(x) = 3x
f2(x) = 4x
f = [f1,  f2]
x = 2
@assert isa(f,  Array{Function,1}) == true
# f.(x) is unavailable

我想将参数应用于与上述语法类似的元素,不使用map[_f(x) for _f in f]

有人可以熟悉这个问题吗?

3 个答案:

答案 0 :(得分:8)

您可以广播管道运算符(|>),例如

x .|> f

答案 1 :(得分:2)

你必须注意如何定义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")

答案 2 :(得分:0)

这是另一种可能性:

initialize