在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的所有组合
发布于 2017-03-17 04:31:57
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更具可读性和灵活性。
发布于 2017-03-17 00:49:44
是的,重塑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跨越行,而y跨越列,因为它被转置为单行矩阵。
https://stackoverflow.com/questions/42839953
复制相似问题