当处理多个数组时,茱莉亚广播为什么不起作用?

bit*_*ise 3 julia

我定义了两个结构和一个像这样的函数

struct A
    x::Float64
end

struct B
    y::Float64
end

f(a::A, b::B) = a.x*sin(b.y)
f.([A(0.1), A(0.2)], [B(1.), B(2.), B(3.)])
Run Code Online (Sandbox Code Playgroud)

但是f返回此错误:

DimensionMismatch(“无法将数组广播为相同大小”)

我该如何解决这个错误?我希望有6个元素的数组作为函数输出。

Bog*_*ski 5

问题在于您的第一个参数是2元素Vector,第二个参数是3元素Vector

例如,如果将第一个参数设为1x2 Matrix,则一切正常:

julia> f.([A(0.1) A(0.2)], [B(1.), B(2.), B(3.)])
3×2 Array{Float64,2}:
 0.0841471  0.168294
 0.0909297  0.181859
 0.014112   0.028224
Run Code Online (Sandbox Code Playgroud)

(请注意,缺少的尺寸或1长度尺寸会自动广播)

请注意,您还可以广播对AB构造函数的调用:

f.(A.([0.1 0.2]), B.(1.:3.))
Run Code Online (Sandbox Code Playgroud)