#author("2023-12-18T19:04:15+09:00","default:ryutarodayo1234","ryutarodayo1234")
#author("2023-12-18T19:09:43+09:00","default:ryutarodayo1234","ryutarodayo1234")
*数値計算のためのPythonライブラリ
RIGHT:[[Google Colabへのリンク>https://drive.google.com/file/d/1CrzHZRy_cUyWLqWIyeLLYDsPGk48m8tN/view?usp=sharing]]

~
~
#contents

~
~
**NumPyとPyTorchとは

~
***NumPy
CPU上での多次元配列データ構造(numpy.ndarray)および数値計算に利用
科学技術計算のためのライブラリ。

~
***PyTorch
CPG/GPU上での多次元入れつデータ構造(torch.Tensor)および数値計算に利用
真相学習のためのフレームワーク。ニューラルネットワークを構築するための構成要素(全結合層、畳み込み層、活性化関数 etc...)、学習のための最適化ルーチンなど、あらゆる機能が提供されている。


~
~
**NumPyとPyTorchを用いた配列の作成

 import numpy as np
 import torch

 x = np.zeros((2,2), dtype=np.float32)
 x

 y = torch.zeros(2,2, dtype=torch.float)
 y

 type(x)

 type(y)

~
~
**numpy.ndarrayとtorch.Tensorのインターフェイスの違い
NumPyとPyTorchを用いる注意点として、numpy.ndarrayとtorch.Tensorのインターフェイスが異なるということが挙げられる。

~
Numpy では配列のサイズを tuple で与える
 x = np.zeros((1,2,3), dtype=np.float32)
 x

PyTorch では配列のサイズを別々の引数で与えられる
 y = torch.zeros(1, 2, 3, dtype=torch.float32)
 y

~
***x = y
x = y
 x.shape == y.shape

~
~
**numpy.ndarrayとtorch.Tensorの互換性
PyTorchには、torch.Tensorからnumpy.ndarrayに変換する関数(tensor.numpy)、numpy.ndarrayからtorch.Tensorを構築する関数(torch.from_numpy)の二つがある。これらにより、データ構造の互換変換が可能。

 x = np.zeros((2,2), dtype=np.float32)

 y = torch.zeros((2,2), dtype=torch.float32)

torch.Tensor から numpy.ndarray への変換
 type(y.numpy())

numpy.ndarray から torch.Tensor への変換
 type(torch.from_numpy(x))

~
***利点
-CPU上で言語特徴量や音響特徴量を計算したあと、Pytorchを用いてニューラルネットワークの学習にその特徴料を利用するために、numpy.ndarrayからtorch.Tensorへの変換を利用する。
-ニューラルネットワークの出力をファイルに保存するために、torch.Tensorからnumpy.ndarrayへの変換を利用する。

なお、相互変換において、データ本体のコピーは行われず、メモリが共有されることに注意が必要。

 x = np.zeros((2,2), dtype=np.float32)
 x

 y = torch.from_numpy(x)
 y

 x[0,0] = 1.0

 x

 y

両者のデータ構造でメモリが共有されているため、変換元でのデータ変更は変更先にもハネ位される。
不要なデータコピーを避けるためよく用いられる。

~
~