在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?
是的,重塑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
Run Code Online (Sandbox Code Playgroud)
请注意,数组的形状与参数的方向匹配; x跨越行并y跨越列,因为它被转换为单行矩阵.
马特的答案很好,但我想提供一个使用数组理解的替代方案:
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.