📚

numpyの階層・テンソルについて

2023/05/29に公開

Numpyの演算

こんにちは!わいわわです!
環境構築を終え、ライブラリをガンガン使ってみるフェーズへ入っています。
今回はNumpyを実際に使用し、テンソルについて学習していきます!

numpyとは(おさらい)

数値計算の際に利用されるライブラリ
np.array()で「ndarray」を作成し、独自のデータ構造で
高速な処理で計算をする(高速な処理を可能する配列のイメージ)

scipy「計算ライブラリ」、scikit-learn「機械学習ライブラリ」
openCV「画像処理ライブラリ」はnumpyにより実装されている

データ分析や機械学習にはベクトルや行列の計算が不可欠です。
pythonのnumpyは計算に便利な関数やメソッドを数多く含むため、
分析処理に定番とのいわれているライブラリです

↓ここでまとめましたね!
https://zenn.dev/waiwawaiwai/articles/c7282b7da5ebc6

numpyはimport文を使用して読み込みます。

import numpy as np

これをコードへ入力!
「インポートし、npという名前でnumpyを使う」という意味です!

テンソルについて

テンソル...テンソルはNumpy配列で表現されるデータのコンテナーのようなものです。
格納されるのは数値データで、それ以外が格納されることは滅多にないです。

スカラー(0階テンソル)

numpyの数値を1つしか格納していないテンソルのことです。
スカラー/0階テンソル/スカラーテンソルなどと呼ばれます。
例)「15」という数値を格納

import numpy as np
x = np.array(15)
X #←Xを出力する

出力結果は array(15) になります

ベクトル(1階テンソル)

線形代数では「要素を縦または横に1列に並べたもの」をベクトルといいます。
numpyの1次元配列もこれにあたり、1階テンソルとも呼びます。

x1 = np.array([1,2,3])
x1

出力結果は array([1,2,3]) となります

ベクトルの中を参照したい場合は
ベクトル名[インデックス名]
で参照ができます。

x1[2] = 100
x1

3番目の要素を参照し、100におきかえています。
出力結果は array([ 1, 2, 100]) でした。
あれ?なぜ空欄ができるのかな、、もし誰かわかりましたらコメントいただければ幸いです。

2階テンソル

numpyの2次元配列=行列のことです。

x2 = np.array([
    [10, 15, 20, 25, 30],
    [20, 30, 40, 50, 60],
    [50, 53, 56, 59, 62]
])
x2

出力結果は
array([[10, 15, 20, 25, 30],
[20, 30, 40, 50, 60],
[50, 53, 56, 59, 62]])
でした、配列[]の後はカンマを忘れずに!(忘れてエラーがでましたので備忘録!)

次元を調べる(ndim属性)

x2.ndim
で次元数を調べることができます!
結果 → 2

行列の形状を調べる(shape属性)

x2.shape
で行列の形状を調べることもできます!
結果 → (3, 5)

shapeは(1次元の要素,2次元の要素,....)を出力していきます。
今回は1次元の要素「行」が3で、2次元の要素「列」が5と出力されました。

3階テンソルとそれ以上のテンソル

複数の行列を格納したものは3階テンソル(3次元配列)となります。
視覚的には行列が立体的に並んだものとしてイメージができます。

x3 = np.array([[
    [10, 15, 20, 25, 30],
    [20, 30, 40, 50, 60],
    [50, 53, 56, 59, 62]
],[
    [10, 15, 20, 25, 30],
    [20, 30, 40, 50, 60],
    [50, 53, 56, 59, 62]

    
],[
    [10, 15, 20, 25, 30],
    [20, 30, 40, 50, 60],
    [50, 53, 56, 59, 62]

]])
x3

出力結果は下記の通りです!

array([[[10, 15, 20, 25, 30],
        [20, 30, 40, 50, 60],
        [50, 53, 56, 59, 62]],

       [[10, 15, 20, 25, 30],
        [20, 30, 40, 50, 60],
        [50, 53, 56, 59, 62]],

       [[10, 15, 20, 25, 30],
        [20, 30, 40, 50, 60],
        [50, 53, 56, 59, 62]]])

3階テンソルをまとめて4階テンソルを作ることもできますが、
一般的なデータ分析や機械学習は3階テンソルまでのことが多いようです。
ただ、カラー画像を扱う場合は4階テンソル、動画を扱う場合は5階テンソルを使うことがあるようです!

所感

今回はデータのテンソルについて学びました!
次回はこの知識をもとにより複雑な数値演算に取り組んでいきます!

Discussion