在 3D 数组的中间维度上广播

Broadcasting on the middle dimension of a 3D array

在 Python 中,我可以有一个 numpy 数组 a,尺寸为 (2, 3, 2) 和 b,尺寸为 (3) 和 do

c = a[:, :, :] + b[None, :, None]

我没弄清楚如何使用 Julia 广播来做到这一点,因为我不知道如何 select 中间维度。

c = broadcast(+, a, b)

执行此操作的正确方法是什么?

a .+ b'

例如

julia> a = rand(2,3,2)
2×3×2 Array{Float64, 3}:
[:, :, 1] =
 0.690245  0.358837   0.240053
 0.206133  0.0406269  0.985161

[:, :, 2] =
 0.207407  0.602692  0.483698
 0.625693  0.236401  0.306893

julia> b = rand(3)
3-element Vector{Float64}:
 0.1824121021951648
 0.33153839873473867
 0.024984235771881913

julia> a .+ b'
2×3×2 Array{Float64, 3}:
[:, :, 1] =
 0.872657  0.690375  0.265037
 0.388545  0.372165  1.01015

[:, :, 2] =
 0.38982   0.93423  0.508682
 0.808105  0.56794  0.331878

详细说明一下,Julia 中的向量默认是行向量;转置为列向量以在第二个维度上广播。