Conversión de varios tipos de datos de Python


prefacio

Este artículo presenta principalmente los métodos de conversión entre algunos formatos de datos comunes en Python, especialmente las operaciones de datos relacionadas con la conversión del tipo de tensor en Pytorch.

1. entumecido

El tipo de punto flotante predeterminado creado por Numpy es np.float64
Los ndarrays enteros creados por Numpy son np.int32
inserte la descripción de la imagen aquí

(1) Convertir numpy a tensor

1. Utilice directamente la función torch.tensor -------- copia profunda
inserte la descripción de la imagen aquí

2. Usa el método torch.from_numpy --- copia superficial
inserte la descripción de la imagen aquí
En comparación con estos dos métodos, usar el método torch.from_numpy es mejor y más seguro.

Cuando solo hay un elemento (tamaño = 1), los escalares se pueden convertir usando el método item().
inserte la descripción de la imagen aquí

(2) Convertir numpy a lista

1. Numpy tiene su propia función nump.tolist() - preste atención a la dimensión de los datos en la listainserte la descripción de la imagen aquí

(3) Convertir numpy a PIL. Tipo de datos de imagen

1. Use el método Image.fromarray()
inserte la descripción de la imagen aquí
Nota : Image.fromarray() requiere que el dtype de entrada sea del tipo uint8

(4) Convertir numpy a tipo de datos pandas

1. Utilice el método pd.DataFrame()
inserte la descripción de la imagen aquí

2. tensor

El tipo de tensor de punto flotante predeterminado en torch es de tipo float32
El tipo de tensor de entero predeterminado en torch es de tipo int64
[note la diferencia con numpy]
inserte la descripción de la imagen aquí

Primero observe los dos métodos torch.tensor() y torch.Tensor(). Ambos son métodos de copia profunda. Si bien devuelven tensores, no comparten memoria con los datos originales, por lo que no se ven afectados por los cambios en los datos originales .

Entendamos la diferencia de nuevo:

  • torch.Tensor() es un alias de torch.FloatTensor(), que es una clase de Python, y todos los tensores son instancias de torch.Tensor. Convierta la entrada a torch.FloatTensor()
  • torch.tensor() es una función. Convierta al tipo de datos correspondiente según el tipo de datos de entrada.

El método para crear un tensot vacío:

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

(1) Método de conversión universal: método torch.as_tensor(), que convierte otros tipos a tipo tensor.

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

data: puede ser lista, tupla, ndarray, escalar, etc.
dtype: puede especificar el tipo de datos en el tensor,
dispositivo: especifica la ubicación del tensor devuelto, el valor predeterminado es cpu

Nota : torch.as_tensor() es un método de copia superficial por defecto, y es una copia profunda cuando el tipo de dtype y el tipo de datos especificados son inconsistentes.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

(2) convertir tensor a numpy

1. Use la función .numpy -------- copia superficialinserte la descripción de la imagen aquí

2. Use la función torch.Tensor.numpy() -------- copia superficial

(3) Conversión de tensor en cpu y gpu

En el proceso de usar el entrenamiento de Pytorch, a menudo es necesario colocar los datos en la gpu para el entrenamiento, o colocar los datos del modelo entrenados en la GPU en la cpu para la prueba. Por lo tanto, el tipo de tensor a menudo necesita ser convertido de un lado a otro.La siguiente es una breve introducción a algunos métodos de conversión.

1. Convertir de CPU a GPU

1. Utilice el método .cuda()
inserte la descripción de la imagen aquí
2. Utilice el método torch.set_default_tensor_type() para establecer el tipo de punto flotante predeterminado en el tipo cuda.
inserte la descripción de la imagen aquí

2. Convertir de GPU a CPU

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

Forma común de escribir:
si la gpu existe, colóquela en la gpu; de lo contrario, colóquela en la cpu.

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

(4) convertir tensor a escalar

Como antes, usa el método item()
inserte la descripción de la imagen aquí

(5) convertir tensor a lista

1. método tolist
inserte la descripción de la imagen aquí

3. El tipo de datos al leer la imagen.

(1)cv2

La función cv2.imread() se utiliza principalmente al leer imágenes.
El uso es:

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

Y devuelve el tipo numpy.
inserte la descripción de la imagen aquí
Nota :

  • Los canales de imagen leídos por la función cv2.imread() se almacenan en el orden BGR , no RGB . Se puede mostrar normalmente usando cv2.imshow(), pero necesita convertirse cuando se usan otras bibliotecas para mostrar.
  • La forma de la imagen leída por cv2.imread() convertida en una matriz es [H, W, C], mientras que la forma requerida para la entrada en Pytorch es [B, C, H, W].
  • cv2.imread() no admite rutas chinas , si no desea cambiar el nombre de la ruta, puede leerlo de la siguiente manera:
import numpy as np
import cv2
img=cv2.imdecode(np.fromfile(imgpath, dtype=np.uint8), cv2.IMREAD_COLOR)
  • Cuando use cv2.imshow() para mostrar la imagen, puede parpadear, puede agregar una línea de declaración: cv2.waitKey(0) , y el nombre de la primera ventana en imshow() no se puede omitir.
    inserte la descripción de la imagen aquí
    que muestra correctamente:
    inserte la descripción de la imagen aquí

(2)PIL

Los métodos de lectura y visualización de imágenes son los siguientes:

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

producción:PIL.PngImagePlugin.PngImageFile

  • El formato de imagen leído por Image está en formato W x H , y la lectura es " RGB ", y el tamaño de la forma después de convertir a numnpy es
    [ C, H, W ]

1. Convertir PIL a tensor

Para usar la biblioteca de gráficos torchvision en pytorch , y torchvision.transforms se usa principalmente para algunas transformaciones de gráficos comunes.

El uso es el siguiente:
No lo escriba como: torchvision.transforms.ToTensor(img)
inserte la descripción de la imagen aquí

Nota : el método ToTensor() convierte el rango de escala de grises de 0-255 a 0-1 cuando se conviertea tensor


Resumir

Consejo: He aquí un resumen del artículo:

De hecho, todavía hay mucho contenido, que se agregará más adelante.

Supongo que te gusta

Origin blog.csdn.net/m0_46366547/article/details/129233059
Recomendado
Clasificación