LoginSignup
1
1

More than 5 years have passed since last update.

プログラマーが表現するテンソル

Posted at

はじめに(不要)

テンソルを今さら勉強したのでプログラマ向けにイメージの共有をします。
実装からテンソルがなにかの雰囲気を読み取れるかと思います。

結論:テンソルは多次元配列で表現できる

実装

ベクトルの具体例

#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から勉強しました、間違い等あれば教えてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1