在 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 中的向量默认是行向量;转置为列向量以在第二个维度上广播。
在 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 中的向量默认是行向量;转置为列向量以在第二个维度上广播。