📜  numpy 数组到火炬张量 (1)

📅  最后修改于: 2023-12-03 15:18:03.219000             🧑  作者: Mango

将 numpy 数组转换为 PyTorch 张量

在深度学习中,经常需要使用 PyTorch 进行数据处理和建模。而 PyTorch 中的核心结构是张量(tensor)。因此,我们需要将常见的数据类型,比如 Numpy 数组,转换为 PyTorch 张量。

本文将向您介绍如何将 Numpy 数组转换为 PyTorch 张量。

1. 转换方法

我们可以使用 torch.from_numpy() 函数将 Numpy 数组转换为 PyTorch 张量。它会返回一个新的张量,其数据类型和形状与输入数组相同。下面是一个例子:

import numpy as np
import torch

# 创建一个 Numpy 数组
np_array = np.array([[1, 2, 3],
                     [4, 5, 6]])

# 将 Numpy 数组转换为张量
tensor = torch.from_numpy(np_array)

# 打印张量
print(tensor)

输出:

tensor([[1, 2, 3],
        [4, 5, 6]], dtype=torch.int32)
2. 注意事项

在使用 torch.from_numpy() 函数时,需要注意以下几点:

(1)内存共享

torch.from_numpy() 函数不会为新创建的张量分配新的内存空间,而是与 Numpy 数组共享相同的内存。如果改变了 Numpy 数组的值,张量的值也会随之改变。

例如:

import numpy as np
import torch

# 创建一个 Numpy 数组
np_array = np.array([[1, 2, 3],
                     [4, 5, 6]])

# 将 Numpy 数组转换为张量
tensor = torch.from_numpy(np_array)

# 改变 Numpy 数组的值
np_array[0][0] = -1

# 打印张量
print(tensor)

输出:

tensor([[-1,  2,  3],
        [ 4,  5,  6]], dtype=torch.int32)

可以看到,改变了 Numpy 数组的值后,张量的值也随之改变。

(2)类型转换

torch.from_numpy() 函数只能将 Numpy 数组转换为支持的数据类型的张量。例如,如果 Numpy 数组的数据类型是复数类型,则无法将其转换为张量。同时,如果 Numpy 数组和张量的数据类型不一致,则会自动进行类型转换。

例如:

import numpy as np
import torch

# 创建一个 Numpy 数组,数据类型为 float
np_array = np.array([[1.1, 2.2, 3.3],
                     [4.4, 5.5, 6.6]])

# 将 Numpy 数组转换为张量
tensor = torch.from_numpy(np_array)

# 打印张量的数据类型
print(tensor.dtype)

输出:

torch.float64

可以看到,由于 Numpy 数组的数据类型为 float,因此转换后的张量的数据类型为 float64。

(3)张量属性

由于 PyTorch 张量与 Numpy 数组相似,因此它们有许多相同的属性,比如形状(shape)和维度(dimension)。通过以下代码,您可以查看张量的属性:

import numpy as np
import torch

# 创建一个 Numpy 数组
np_array = np.array([[1, 2, 3],
                     [4, 5, 6]])

# 将 Numpy 数组转换为张量
tensor = torch.from_numpy(np_array)

# 打印张量的形状和维度
print(tensor.shape)
print(tensor.ndim)

输出:

torch.Size([2, 3])
2

可以看到,张量的形状和维度与 Numpy 数组相同。

3. 总结

本文介绍了如何将 Numpy 数组转换为 PyTorch 张量。在实际的深度学习项目中,您将经常需要使用这个技巧来处理数据。在转换时,需要注意内存共享、类型转换和张量属性等问题。