ひかりの備忘録

Numo::NArray でドット積

require "numo/narray"

実数ベクトルのドット積

a = Numo::NArray[4, -1, 2]
b = [2, -2, -1]
c = a.dot b
8

複素数ベクトルのドット積

a = Numo::NArray[1+1i, 1-1i, -1+1i, -1-1i]
b = [3-4i, 6-2i, 1+2i, 4+3i]
c = a.conj.dot b
(1.0-5.0i)

複素数とそれ自身のドット積

d = a.conj.dot a
(8.0+0.0i)

行列のドット積

a = Numo::NArray[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
b = [[9, 8, 7], [6, 5, 4], [3, 2, 1]]
c = (a * b).sum(0)
Numo::Int64#shape=[3]
[54, 57, 54]

行ベクトルとしてドット積を求める

c = Numo::NArray[(a * b).sum(1)].transpose
Numo::Int64(view)#shape=[3,1]
[[46], 
 [73], 
 [46]]