はじめに
PyTorchを活用するシーンが増えてきたので
tensor操作に関して備忘録を残しておくことにする
初級者向けの内容です
tensor操作
NumPyのarray操作と似ている
①定義
例) 2行3列のデータを両者で定義すると・・・
import numpy as np
npdata = np.array( [ [0,1,2],[3,4,5] ] )
import torch
tendata = torch.tensor( [ [0,1,2],[3,4,5] ] )
他にも類似した関数は下記の通りである.
ゼロを定義する
# numpy
npzero = np.zeros((2,3))
# tensor
tenzero = torch.zeros((2,3))
1を定義する
# numpy
npone = np.ones((2,3))
# tensor
tenone = torch.ones((2,3))
乱数を定義する
# numpy
npran = np.random.rand(2,3)
# tensor
tenran = torch.rand((2,3))
②tensorのサイズ,タイプ等の確認
データ型の確認
ten = torch.tensor( [[0,1,2],[3,4,5]])
ten.dtype
サイズの確認
ten.shape
Pythonのオブジェクトタイプの確認
type(ten)
NumPyとPyTorchでデフォルトの型が異なる点注意が必要
int型 | float型 | |
---|---|---|
NumPy | int32 | float64 |
PyTorch | int64 | float32 |
例えば,NumPyと型を揃えて,PyTorchで定義したいときは
dtypeオプションを活用すると良い
ten2 = torch.zeros( (2,3), dtype = torch.int32 )
③tensor ↔️ numpy.array 変換
両者の間での変換については下記の通り
tensor から numpy.arrayへ変換
# tensorで宣言
before = torch.zeros(3)
# tensorからnumpy arrayに変換
after = before.numpy()
Numpy arrayからTensorに変換
change = torch.from_numpy(after)
さらに
pandas dataframe から Numpy arrayに変換 tensor に変換
# pandas dataframe宣言
import pandas as pd
dict1 = {"a":[1,2,3],"b":[1,2,3],"c":[1,2,3]}
df = pd.DataFrame(dict1)
# pandas から numpyに変換
arr = df.to_numpy()
# numpy から tensorに変換
arrcha = torch.from_numpy(arr)
④転置行列
transposeを活用した転置行列の求め方は下記の通り
# 4行3列の乱数tensorを定義
x = torch.rand((4,3))
# xの転置行列を算出
Tx = x.transpose(0,1)
⑤行列のサイズ変更
reshapeを活用した行列サイズ変更は下記の通り
# 1行16列データを作成
x = torch.ones(16)
# 2行8列データに変換
rex1 = x.reshape(2,8)
さらに列数をオートで4行に変換したいときはreshape(4,-1)
# 4行4列データに変換
rex2 = x.reshape(4,-1)
rex2
※ 割り切れないときはエラーになるので注意
x2 = torch.ones(15)
rex3 = x2.reshape(2,-1)
rex3
操作に関するノートブックはこちら