为什么';处理多个阵列时,julia广播是否正常工作?

为什么';处理多个阵列时,julia广播是否正常工作?,julia,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.)]) 但是f返回这个错误: 维度不匹配(“无法将数组广播到公共大小”) 如何解决此错误?我希望有一个包含6个元素的数组作为函数输出。问题是,第一个参数是2元素向量,第二个参数是3元素向量 例如,如果将第一个参

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

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.)])
但是f返回这个错误:

维度不匹配(“无法将数组广播到公共大小”)


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

问题是,第一个参数是2元素
向量,第二个参数是3元素
向量

例如,如果将第一个参数设置为1x2
矩阵
,则所有参数都可以正常工作:

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
(请注意,缺失或1长度标注将自动广播)

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

f.(A.([0.1 0.2]), B.(1.:3.))

数组必须具有兼容的维度-要么大小和形状相同(局部操作),要么它们跨越一个更大的向量空间,其中每个都有单例维度,而其他都有非单例维度,例如,作为维度上的操作,.*操作符将导致映射

(1 x 1 x n) .* (p x q x 1)  => p x q x n

也许这个视觉指南会有帮助:没问题。我只是一个初级程序员!先生你回复我的帖子太快了!此外,正如我在上面所评论的,缺少的维度被视为单一维度,例如
(1x1xn)。*(pxq)=>pxqxn