在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的所有组合?

Matt 的回答很好,但我想使用数组理解提供另一种选择:

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

在我看来,数组理解通常比broadcastreshape更具可读性和灵活性。

是的,重塑y使其与x正交。 .矢量化使用broadcast来完成其工作。我将其想象为在所有其他维度上"挤压"单例维度。

这意味着对于向量xy,您只需重塑其中一个即可评估xy的所有组合的乘积:

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

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

最新更新