julia で内積を計算する入力方法, NumPy の行列かけ算との違い
julia で内積を計算する入力方法は2つあります。dot() と演算記号の「⋅」を使う方法です。
まず、julia 1.0.x 以上では、おまじないが必要です。
julia> using LinearAlgebra
dot() は入力には困りませんが、演算記号の「⋅」はどうやって入力しましょう?
MacOS X では、alt+8 で「•」 という記号が入力できます。しかし、これでは計算してくれません。
演算記号の「⋅」は、TeXの \cdot に続いて タブを押す方法で入力できます。 \alpha などもタブで「α」に変換してくれます。
julia> a=[1,2,3]
3-element Array{Int64,1}:
1
2
3
julia> b=[4,5,6]
3-element Array{Int64,1}:
4
5
6
julia> a*b
ERROR: DimensionMismatch("Cannot multiply two vectors")
Stacktrace:
[1] *(::Array{Int64,1}, ::Array{Int64,1}) at ./linalg/rowvector.jl:184
julia> a.*b
3-element Array{Int64,1}:
4
10
18
julia> a\cdot<-ここで続けてタブです
julia> a⋅b
32
julia> dot(a,b)
32
PyCall で NumPy を呼び出して同じ演算をしてみしょう。
julia> using PyCall julia> @pyimport numpy as np julia> np.dot(a,b) 32
1×n のベクトルでは、numpy の numpy.dot() と julia の dot() は同じです。
しかし、n×m になると異なるので注意が必要です。
julia> A = [1 2 ; 3 4]
2×2 Array{Int64,2}:
1 2
3 4
julia> B = [5 6 ; 7 8]
2×2 Array{Int64,2}:
5 6
7 8
julia> A⋅B
ERROR: MethodError: no method matching dot(::Array{Int64,2}, ::Array{Int64,2})
julia> np.dot(A,B)
2×2 Array{Int64,2}:
19 22
43 50
julia> A*B
2×2 Array{Int64,2}:
19 22
43 50
julia> A.*B #ブロードキャストでは、同じ位置のかけ算
2×2 Array{Int64,2}:
5 12
21 32
julia の dot() は純粋に、内積に対して使われるようです。