为什么';处理多个阵列时,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
。