ジュリアで行ごと、列ごとにスカラー倍する方法
概要
Juliaの行列において、行ごと、列ごとにスカラー乗算する方法を紹介する。
コード
julia> d = 1:10
1:10
julia> X = ones(Int64, 10, 10)
10×10 Matrix{Int64}:
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
ベクトル d
と 1行列 X
が与えられた場合、乗算 *
のブロードキャスティングを通じて X
の行または列ごとにスカラー乗算を行うことができる。ここで、左から乗算するか右から乗算するかは同じだが、ベクトルが縦に長いか横に長いかによって行/列が変わる。
行ごとのスカラー乗算 X .* d
行ごとのスカラー乗算には、縦に長いベクトル、つまり、$d \in \mathbb{R}^{n \times 1} \approx \mathbb{R}^{n}$ が必要である。
julia> X .* d
10×10 Matrix{Int64}:
1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5 5
6 6 6 6 6 6 6 6 6 6
7 7 7 7 7 7 7 7 7 7
8 8 8 8 8 8 8 8 8 8
9 9 9 9 9 9 9 9 9 9
10 10 10 10 10 10 10 10 10 10
julia> d .* X
10×10 Matrix{Int64}:
1 1 1 1 1 1 1 1 1 1
2 2 2 2 2 2 2 2 2 2
3 3 3 3 3 3 3 3 3 3
4 4 4 4 4 4 4 4 4 4
5 5 5 5 5 5 5 5 5 5
6 6 6 6 6 6 6 6 6 6
7 7 7 7 7 7 7 7 7 7
8 8 8 8 8 8 8 8 8 8
9 9 9 9 9 9 9 9 9 9
10 10 10 10 10 10 10 10 10 10
列ごとのスカラー乗算 X .* d'
列ごとのスカラー乗算には、横に長いベクトル、つまり、$d \in \mathbb{R}^{1 \times n} $ が必要である。
julia> X .* d'
10×10 Matrix{Int64}:
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
julia> d' .* X
10×10 Matrix{Int64}:
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
完全なコード
d = 1:10
X = ones(Int64, 10, 10)
X .* d
d .* X
X .* d'
d' .* X
環境
- OS: Windows
- julia: v1.9.0