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

时间:2017-03-16 16:40:29

标签: 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的所有组合?

2 个答案:

答案 0 :(得分:5)

是的,重新塑造//run this during the duration of the two animations below earthNode.runAction(SCNAction.rotateBy(x: 0, y: 5, z: 5, duration: 4)) //run this action right away earthNode.runAction(SCNAction.moveBy(x: 0, y: 0, z: -5, duration: 2)) //RUN THIS ACTION AFTER ACTION ABOVE IS COMPLETED earthNode.runAction(SCNAction.moveBy(x: 0, y: 0, z: 5, duration: 2)) ,使其与y正交。 x矢量化使用broadcast来完成其工作。我想这就是"挤压"所有其他维度的单身尺寸。

这意味着对于向量.x,您只需通过重新设置其中一个来评估yx的所有组合的乘积:

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 跨越行,x跨越列,因为它被转换为单行矩阵。

答案 1 :(得分:5)

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更具可读性和灵活性。