在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])
,...
有没有办法评估x
和y
的所有组合?
答案 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
,您只需通过重新设置其中一个来评估y
和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
跨越行,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
在我看来,阵列理解通常比broadcast
和reshape
更具可读性和灵活性。