Konvertierung verschiedener Python-Datentypen


Vorwort

In diesem Artikel werden hauptsächlich die Konvertierungsmethoden zwischen einigen gängigen Datenformaten in Python vorgestellt, insbesondere die Datenoperationen im Zusammenhang mit der Konvertierung des Tensortyps in Pytorch.

1. Numpy

Der von Numpy erstellte Standard-Gleitkommatyp ist np.float64.
Die von Numpy erstellten ganzzahligen Ndarrays sind np.int32
Fügen Sie hier eine Bildbeschreibung ein

(1) Numpy in Tensor umwandeln

1. Verwenden Sie direkt die Funktion Torch.tensor -------- Deep Copy
Fügen Sie hier eine Bildbeschreibung ein

2. Verwenden Sie die Methode Torch.from_numpy --- flache Kopie.
Fügen Sie hier eine Bildbeschreibung ein
Im Vergleich zu diesen beiden Methoden ist die Verwendung der Methode Torch.from_numpy besser und sicherer.

Wenn nur ein Element vorhanden ist (Größe = 1), können Skalare mit der Methode item() konvertiert werden.
Fügen Sie hier eine Bildbeschreibung ein

(2) Konvertieren Sie Numpy in eine Liste

1. Numpy hat seine eigene Funktion nump.tolist() – achten Sie auf die Dimension der Daten in der ListeFügen Sie hier eine Bildbeschreibung ein

(3) Konvertieren Sie Numpy in den Datentyp PIL.Image

1. Verwenden Sie die Methode Image.fromarray().
Fügen Sie hier eine Bildbeschreibung ein
Hinweis : Image.fromarray() erfordert, dass der Eingabe-DType vom Typ uint8 ist

(4) Konvertieren Sie Numpy in den Pandas-Datentyp

1. Verwenden Sie die pd.DataFrame()-Methode
Fügen Sie hier eine Bildbeschreibung ein

2. Tensor

Der Standard-Gleitkomma-Tensortyp in Torch ist der Typ float32.
Der Standard-Integer-Tensortyp in Torch ist der Typ int64
[beachten Sie den Unterschied zu Numpy].
Fügen Sie hier eine Bildbeschreibung ein

Schauen Sie sich zunächst die beiden Methoden Torch.tensor() und Torch.Tensor() an. Bei beiden handelt es sich um Deep-Copy-Methoden. Während sie Tensoren zurückgeben, teilen sie sich den Speicher nicht mit den Originaldaten und sind daher nicht von Änderungen in den Originaldaten betroffen .

Lassen Sie uns den Unterschied noch einmal verstehen:

  • Torch.Tensor() ist ein Alias ​​von Torch.FloatTensor(), einer Python-Klasse, und alle Tensoren sind Instanzen von Torch.Tensor. Konvertieren Sie die Eingabe in Torch.FloatTensor()
  • Torch.tensor() ist eine Funktion. Konvertieren Sie entsprechend dem Eingabedatentyp in den entsprechenden Datentyp.

Die Methode zum Erstellen eines leeren Tensots:

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

(1) Universelle Konvertierungsmethode: Torch.as_tensor()-Methode, die andere Typen in Tensortypen konvertiert.

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

Daten: können Liste, Tupel, Ndarray, Skalar usw. sein.
dtype: kann den Datentyp im Tensor angeben,
Gerät: den Speicherort des zurückgegebenen Tensors angeben, der Standardwert ist CPU

Hinweis : Torch.as_tensor() ist standardmäßig eine flache Kopiermethode und eine tiefe Kopie, wenn der angegebene dtype und der angegebene Datentyp inkonsistent sind.
Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein

(2) Tensor in Numpy umwandeln

1. Verwenden Sie die .numpy-Funktion -------- flache KopieFügen Sie hier eine Bildbeschreibung ein

2. Verwenden Sie die Funktion Torch.Tensor.numpy() -------- flache Kopie

(3) Konvertierung des Tensors auf CPU und GPU

Bei der Verwendung des Pytorch-Trainings ist es häufig erforderlich, die Daten zum Training auf die GPU zu übertragen oder die auf der GPU trainierten Modelldaten zum Testen auf die CPU zu übertragen. Daher muss der Tensortyp häufig hin und her konvertiert werden. Im Folgenden finden Sie eine kurze Einführung in einige Konvertierungsmethoden.

1. Konvertieren von CPU zu GPU

1. Verwenden Sie die Methode .cuda().
Fügen Sie hier eine Bildbeschreibung ein
2. Verwenden Sie die Methode Torch.set_default_tensor_type() , um den Standard-Gleitkommatyp auf den Typ cuda festzulegen.
Fügen Sie hier eine Bildbeschreibung ein

2. Konvertieren von GPU zu CPU

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

Gängige Schreibweise:
Wenn die GPU vorhanden ist, legen Sie sie auf die GPU, andernfalls auf die CPU.

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

(4) Tensor in Skalar umwandeln

Verwenden Sie wie zuvor die Methode item()
Fügen Sie hier eine Bildbeschreibung ein

(5) Konvertieren Sie den Tensor in eine Liste

1. Tolist-Methode
Fügen Sie hier eine Bildbeschreibung ein

3. Der Datentyp beim Lesen des Bildes

(1)cv2

Die Funktion cv2.imread() wird hauptsächlich beim Lesen von Bildern verwendet.
Die Verwendung ist:

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

Und es gibt den Numpy-Typ zurück.
Fügen Sie hier eine Bildbeschreibung ein
Hinweis :

  • Die von der Funktion cv2.imread() gelesenen Bildkanäle werden in der Reihenfolge BGR und nicht RGB gespeichert . Es kann normal mit cv2.imshow () angezeigt werden, muss jedoch konvertiert werden, wenn andere Bibliotheken zur Anzeige verwendet werden.
  • Die Form des von cv2.imread() gelesenen und in ein Array umgewandelten Bildes ist [H, W, C]; während die für die Eingabe in Pytorch erforderliche Form [B, C, H, W] ist.
  • cv2.imread() unterstützt keine chinesischen Pfade . Wenn Sie den Pfadnamen nicht ändern möchten, können Sie ihn wie folgt lesen:
import numpy as np
import cv2
img=cv2.imdecode(np.fromfile(imgpath, dtype=np.uint8), cv2.IMREAD_COLOR)
  • Wenn Sie cv2.imshow() zum Anzeigen des Bildes verwenden, kann es vorkommen, dass Sie eine Anweisungszeile hinzufügen: cv2.waitKey(0) ; und der erste Fenstername in imshow() darf nicht weggelassen werden.
    Fügen Sie hier eine Bildbeschreibung ein
    was korrekt anzeigt:
    Fügen Sie hier eine Bildbeschreibung ein

(2)PIL

Die Methoden zum Lesen und Anzeigen von Bildern sind wie folgt:

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

Ausgang:PIL.PngImagePlugin.PngImageFile

  • Das von Image gelesene Bildformat ist im B x H -Format, das eingelesene ist „ RGB “ und die Formgröße nach der Konvertierung in Numnpy ist
    [ C, H, W ]

1. Konvertieren Sie PIL in einen Tensor

Um die Grafikbibliothek Torchvision in Pytorch zu verwenden , wird Torchvision.transforms hauptsächlich für einige gängige Grafiktransformationen verwendet.

Die Verwendung ist wie folgt:
Schreiben Sie es nicht als: Torchvision.transforms.ToTensor(img)
Fügen Sie hier eine Bildbeschreibung ein

Hinweis : Die ToTensor()-Methode konvertiert den Graustufenbereich von 0-255 in 0-1, wenn siein Tensor konvertiert wird


Zusammenfassen

Tipp: Hier ist eine Zusammenfassung des Artikels:

Tatsächlich gibt es noch viele Inhalte, die später hinzugefügt werden.

Ich denke du magst

Origin blog.csdn.net/m0_46366547/article/details/129233059
Empfohlen
Rangfolge