logo

ジュリアで行ごと、列ごとにスカラー倍する方法 📂ジュリア

ジュリアで行ごと、列ごとにスカラー倍する方法

概要

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

ベクトル d1行列 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