在Julia中评估向量化函数的组合

sho*_*oli 6 julia

在Julia中,带点的矢量化函数.用于元素操作.

运行f.(x)方式f(x[1]),f(x[2])......依次执行

但是,假设我有一个带有两个参数的函数,比如说 g(x,y)

我想g(x[1],y[1]),g(x[2],y[1]),g(x[3],y[1]),..., ,,g(x[1],y[2]) ,...g(x[2],y[2])g(x[3],y[2])

有没有什么办法来评估的所有组合xy

Mat*_* B. 5

是的,重塑y,使其正交x.该.矢量使用broadcast做其工作.我认为这是在所有其他维度上"挤出"单个维度.

这意味着,对于矢量xy,你可以评估的所有组合的产品x,并y通过简单地重塑其中之一:

julia> x = 1:5
       y = 10:10:50
       (+).(x, reshape(y, 1, length(y)))
5×5 Array{Int64,2}:
 11  21  31  41  51
 12  22  32  42  52
 13  23  33  43  53
 14  24  34  44  54
 15  25  35  45  55
Run Code Online (Sandbox Code Playgroud)

请注意,数组的形状与参数的方向匹配; x跨越行并y跨越列,因为它被转换为单行矩阵.


Fen*_*ang 5

马特的答案很好,但我想提供一个使用数组理解的替代方案:

julia> x = 1:5
       y = 10:10:50
       [i + j for i in x, j in y]
5×5 Array{Int64,2}:
 11  21  31  41  51
 12  22  32  42  52
 13  23  33  43  53
 14  24  34  44  54
 15  25  35  45  55
Run Code Online (Sandbox Code Playgroud)

在我看来,数组理解通常比broadcast和更易读,更灵活reshape.