ジュリアで異なるサイズのベクトル成分ごとに操作する方法
説明
julia> x = [1 2 3]
1×3 Matrix{Int64}:
1 2 3
julia> y = [1 2 3 4]
1×4 Matrix{Int64}:
1 2 3 4
julia> x .+ y
ERROR: DimensionMismatch
サイズが異なる二つのベクトルは、基本的に要素ごとの演算を行うことができない。これを直接実装するなら、二重for文を使う必要があるが、幸いにも一つを行ベクトル、もう一つを列ベクトルとして与えることで、次のように要素ごとに演算した二次元配列を返すことができる。これは、MATLABやPython NumPyでも可能だ。
サイズが異なってもエラーにならない点で、意図しない計算になっているか注意が必要だ。
julia> x' .+ y
3×4 Matrix{Int64}:
2 3 4 5
3 4 5 6
4 5 6 7
julia> x' .* y
3×4 Matrix{Int64}:
1 2 3 4
2 4 6 8
3 6 9 12
julia> x' ./ y
3×4 Matrix{Float64}:
1.0 0.5 0.333333 0.25
2.0 1.0 0.666667 0.5
3.0 1.5 1.0 0.75
もちろん、x'
の代わりに transpose(x)
を使ってもできる。
環境
- OS: Windows10
- Version: Julia 1.6.2