Pythonの各種データ型変換


序文

この記事では主に、Python のいくつかの一般的なデータ形式間の変換方法、特に Pytorch でのテンソル型の変換に関連するデータ操作を紹介します。

1. ナンピー

Numpy によって作成されるデフォルトの浮動小数点型はnp.float64
です。 Numpy によって作成される整数 ndarray はnp.int32です。
ここに画像の説明を挿入

(1) numpyをtensorに変換する

1. torch.tensor 関数を直接使用する --------ディープコピー
ここに画像の説明を挿入

2. torch.from_numpy メソッドを使用する ---浅いコピー
ここに画像の説明を挿入
これら 2 つの方法を比較すると、torch.from_numpy メソッドを使用する方が優れており、より安全です。

要素が 1 つだけ (サイズ = 1) の場合、item() メソッドを使用してスカラーを変換できます。
ここに画像の説明を挿入

(2) numpyをリストに変換する

1. Numpy には独自の関数 nump.tolist() があります - リスト内のデータの次元に注意してくださいここに画像の説明を挿入

(3) numpyをPIL.Imageデータ型に変換

1. Image.fromarray() メソッドを使用します。
ここに画像の説明を挿入
: Image.fromarray() では、入力 dtype が uint8 型である必要があります。

(4) numpy を pandas データ型に変換する

1. pd.DataFrame()メソッドを使用する
ここに画像の説明を挿入

2. テンソル

torch のテンソルのデフォルトの浮動小数点型は float32 型です。
torch のテンソルのデフォルトの整数型は int64 型です
[numpy との違いに注意してください]
ここに画像の説明を挿入

まず、torch.tensor() と torch.Tensor() の 2 つのメソッドを見てください。どちらもディープ コピー メソッドであり、テンソルを返す間、元のデータとメモリを共有しないため、元のデータの変更の影響を受けません

もう一度違いを理解してみましょう。

  • torch.Tensor() は Python クラスである torch.FloatTensor() のエイリアスであり、すべてのテンソルは torch.Tensor のインスタンスです。入力を torch.FloatTensor() に変換します
  • torch.tensor() は関数です。入力データ型に応じて、対応するデータ型に変換します。

空の tensot を作成する方法:

#两种方法
torch.Tensor()
torch.tensor(())

(1) ユニバーサル変換メソッド: torch.as_tensor() メソッド。他の型をテンソル型に変換します。

torch.as_tensor(data, dtype=None, device=None)->Tensor

data: リスト、タプル、ndarray、スカラーなどにすることができます。
dtype: テンソル内のデータのタイプを指定できます。
device: 返されたテンソルの場所を指定します。デフォルトは cpu です。

: torch.as_tensor() はデフォルトではシャロー コピー メソッドですが、指定された dtype とデータ型が一致しない場合はディープ コピーになります。
ここに画像の説明を挿入
ここに画像の説明を挿入

(2) テンソルをnumpyに変換する

1. .numpy 関数を使用します --------浅いコピーここに画像の説明を挿入

2. torch.Tensor.numpy() 関数を使用します --------浅いコピー

(3) CPUとGPUでのテンソルの変換

Pytorch トレーニングを使用するプロセスでは、トレーニングのためにデータを GPU に配置したり、テストのために GPU でトレーニングされたモデル データを CPU に配置したりする必要があることがよくあります。したがって、テンソル型を前後に変換する必要がある場合が多く、以下にいくつかの変換方法を簡単に紹介します。

1. CPU から GPU への変換

1. .cuda() メソッドを使用します。
ここに画像の説明を挿入
2. torch.set_default_tensor_type()メソッドを使用して、デフォルトの浮動小数点型を cuda 型に設定します。
ここに画像の説明を挿入

2. GPUからCPUへの変換

#把数据转到CPU----.cpu()方法
gpu_tensor.cpu()

一般的な書き方:
GPU が存在する場合は GPU に配置し、存在しない場合は CPU に配置します。

device = torch.device('cuda' if torch.cuda.is_available()  else 'cpu')
tensor1 = tensor1.to(device)
tensor2 = tensor2.to(device)
#......

(4) テンソルをスカラーに変換する

前と同様に、 item() メソッドを使用します
ここに画像の説明を挿入

(5) テンソルをリストに変換

1.tolistメソッド
ここに画像の説明を挿入

3. 画像読み込み時のデータ型

(1)cv2

cv2.imread()関数は主に画像を読み取るときに使用されます

img = cv2.imread(filename, flags)
#filename:图片路径
#flags:读取图片的格式。默认为1:彩色图片;0:灰度图片;

そして、numpy 型を返します。
ここに画像の説明を挿入
:

  • cv2.imread() 関数によって読み取られた画像チャネルは、 RGBではなくBGRの順序で格納されますcv2.imshow()を使用すると正常に表示できますが、他のライブラリを使用して表示する場合は変換が必要です。
  • cv2.imread() で読み取って配列に変換した画像の形状は [H, W, C] ですが、Pytorch での入力に必要な形状は [B, C, H, W] です。
  • cv2.imread() は中国語のパスをサポートしていません。パス名を変更したくない場合は、次のように読み取ることができます。
import numpy as np
import cv2
img=cv2.imdecode(np.fromfile(imgpath, dtype=np.uint8), cv2.IMREAD_COLOR)
  • cv2.imshow() を使用してピクチャが点滅する可能性があることを表示する場合、 cv2.waitKey(0) ;というステートメントの行を追加できますが、 imshow() の最初のウィンドウ名は省略できません。
    ここに画像の説明を挿入
    これは正しく表示されます:
    ここに画像の説明を挿入

(2)ピル

画像の読み込みと表示方法は以下のとおりです。

from PIL import Image
img = Image.open('E:\A.png')
img.show()
print(type(img))

出力:PIL.PngImagePlugin.PngImageFile

  • Imageで読み込む画像形式はW×H形式、読み込みは「RGB」、numnpy変換後のシェイプサイズは
    [ C, H, W ]となります。

1. PIL をテンソルに変換する

pytorch でグラフィックス ライブラリtorchvisionを使用するには、torchvision.transforms が主にいくつかの一般的なグラフィックス変換に使用されます。

使用法は次のとおりです。torchvision.transforms.ToTensor(img)
のように記述しないでください。
ここに画像の説明を挿入

: ToTensor() メソッドは、テンソル


要約する

ヒント: この記事の要約は次のとおりです。

実際には、まだ多くのコンテンツがあり、後で追加される予定です。

おすすめ

転載: blog.csdn.net/m0_46366547/article/details/129233059