##はじめに(不要)
テンソルを今さら勉強したのでプログラマ向けにイメージの共有をします。
実装からテンソルがなにかの雰囲気を読み取れるかと思います。
#結論:テンソルは多次元配列で表現できる
#実装
ベクトルの具体例
#2次元のベクトル;sizeが2のList
vector2 = [1,2]
#3次元のベクトル;sizeが3のList
vector3 = [3,4,5]
テンソルの具体例
#0階のテンソル;数値型
tensor0 = 5
#1階のテンソル;sizeは自由なList;ベクトル
tensor1 = [1,2,3,4,5,6]
#2階のテンソル;Listが1階入れ子になったList
#各Listのsizeは自由
tensor2 = [[1,2,3],[4,5,6],[7,8,9]]
#3階のテンソル;Listが2階入れ子になったList
#各Listのsizeは自由
tensor2 = [ [[1,1,1],[2,2,2]] , [[3,3,3],[4,4,4]] ]
##モノクロ画像は2階のテンソルで表現できる
#3*3のListを全部0で埋める
bw = Array.new(3){ Array.new(3,0)}
p bw
#=> [[0,0,0],[0,0,0],[0,0,0]]
p bw[2][2]
#=> 0
##RGB画像は3階のテンソルで表現できる
#3*3*3のListを全部0で埋める
rgb = Array.new(3){ Array.new(3){ Array.new(3,0)}}
p rgb
#=>
#[[[0,0,0],[0,0,0],[0,0,0]], #赤色
#[[0,0,0],[0,0,0],[0,0,0]], #緑色
#[[0,0,0],[0,0,0],[0,0,0]]] #青色
p rgb[2][2][2]
#=> 0
#テンソル計算のイメージ
テンソルは空間と空間の積で得られる空間の元だと言えるが、いまいちピンと来ないので、イメージとしてベクトル空間同士の積をみてみる。
ベクトルは1階のテンソルであり、それらをかけ合わせたものは2階のテンソルとなる。
(積、と丸めているが、テンソル積のこと)
#任意の(x,y,z)と(p,q,r)
double x,y,z,p,q,r
#ベクトル空間の元(1階のテンソル空間)
vctr2xy = [x,y,z]
vctr2pq = [p,q,r]
#ベクトルの掛け算を***で表現すると
#tnsr = vctr2xy *** vctr2xy
#2階のテンソル空間の元
tnsr =
[[x*p,x*q,x*r],
[y*p,y*q,y*r],
[z*p,z*q,z*r]]
##あとがき
大学の授業全部寝ていた
なぜかテンソルを全く知らなかったので0から勉強しました、間違い等あれば教えてください。