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() は純粋に、内積に対して使われるようです。