理解 NumPy 数据类型

NumPyBeginner
立即练习

介绍

本实验提供了一个循序渐进的指南,帮助你理解和管理 NumPy 中的各种数据类型。NumPy (Numerical Python) 是一个强大的库,它为大型、多维数组和矩阵提供了支持,并附带了一系列数学函数,可以高效地对这些数组进行操作。与 Python 内置的列表不同,NumPy 数组在内存使用和数值计算速度方面更具优势。

你将学习如何检查、指定和转换 NumPy 数组的数据类型。理解数据类型至关重要,因为它们会影响内存使用和计算性能。所有编码将在 main.py 文件中使用代码编辑器完成,你将从终端运行脚本。这种实践方法将帮助你掌握这些基础概念,它们对于数值计算和数据分析至关重要。

这是一个实验(Guided Lab),提供逐步指导来帮助你学习和实践。请仔细按照说明完成每个步骤,获得实际操作经验。根据历史数据,这是一个 初级 级别的实验,完成率为 99%。获得了学习者 94% 的好评率。

检查数组的数据类型

当你创建一个 NumPy 数组时,NumPy 会自动推断出最适合其元素的(数据)类型。你可以使用数组的 dtype 属性轻松检查这个推断出的数据类型。

dtype 属性会告诉你数组包含的数据类型(例如整数、浮点数等)以及每个元素占用的内存大小。这些信息对于理解 NumPy 将如何处理你的数据中的数学运算非常重要。

首先,从左侧的文件浏览器中打开 main.py 文件。我们将添加代码来创建一个简单的数组,然后打印其数据类型。

将以下代码添加到 main.py

## Create a NumPy array from a list of integers
## np.array() converts a Python list into a NumPy array
arr_int = np.array([1, 2, 3, 4, 5])

## Print the data type of the array
## .dtype shows the data type of array elements
print("Data type of arr_int:", arr_int.dtype)

现在,保存文件并从终端运行它以查看输出。

python main.py

你将在控制台中看到打印出的数组数据类型。具体的整数类型(如 int64)取决于你系统的架构。

Data type of arr_int: int64

这证实了 NumPy 正确地将元素识别为整数。

创建时指定数据类型

虽然 NumPy 的自动类型推断很有用,但你通常需要显式地定义数组的数据类型,以提高内存效率或满足特定计算的要求。你可以在创建数组时使用 dtype 参数来完成此操作。

不同的数据类型占用不同的内存量:

  • int32 每个元素占用 4 字节
  • int64 每个元素占用 8 字节
  • float32 每个元素占用 4 字节
  • float64 每个元素占用 8 字节

对于大型数组,选择正确的数据类型可以节省大量内存,并可能提高性能。

让我们创建一个数组并将其数据类型指定为 32 位浮点数。请使用以下代码修改你的 main.py 文件。你可以注释掉或删除上一步的代码。

## Create an array and specify the data type as float32
## The dtype parameter tells NumPy to store each number as a 32-bit float
arr_float = np.array([1.0, 2.5, 3.8], dtype=np.float32)

## Print the data type and the array
print("Data type of arr_float:", arr_float.dtype)
print("Array arr_float:", arr_float)

保存文件并再次运行它。

python main.py

输出将显示数组已使用你指定的数据类型 float32 创建。

Data type of arr_float: float32
Array arr_float: [1.  2.5 3.8]

你可以使用各种数据类型字符串或 NumPy 对象,例如 float32'f4'int64'i8',或布尔值的 np.bool_

转换数组的数据类型

创建数组后,你可能需要转换其数据类型。.astype() 方法用于此目的。此方法不会更改原始数组,而是返回一个具有指定数据类型的新数组。

类型转换在以下情况很有用:

  • 执行需要特定数据类型的操作
  • 通过转换为更小的类型来减少内存使用
  • 为期望特定类型的函数准备数据

让我们创建一个整数数组,然后将其转换为浮点数数组。请使用以下代码更新你的 main.py 文件:

## Create an integer array
## np.arange(5) creates an array with numbers from 0 to 4 (5 elements total)
original_arr = np.arange(5)
print("Original array:", original_arr)
print("Original dtype:", original_arr.dtype)

## Convert the array to float64
## .astype() creates a new array with the specified data type
converted_arr = original_arr.astype(np.float64)
print("Converted array:", converted_arr)
print("Converted dtype:", converted_arr.dtype)

保存文件并执行它。

python main.py

输出显示 original_arr 仍然是整数数组,而 converted_arr 是一个具有 float64 数据类型的新数组。

Original array: [0 1 2 3 4]
Original dtype: int64
Converted array: [0. 1. 2. 3. 4.]
Converted dtype: float64

这是执行类型转换的安全方法,不会丢失你的原始数据。

处理其他数据类型

NumPy 除了整数和浮点数之外,还支持多种数据类型,包括布尔值和复数。了解 NumPy 如何处理这些数据类型会非常有用。

布尔数组特别适用于:

  • 过滤数据(选择满足特定条件的元素)
  • 逻辑运算
  • 掩码数组(masking arrays)

例如,你可以创建一个布尔值数组,它表示 True/False 条件。

让我们创建一个布尔数组。更新你的 main.py 文件:

## Create a boolean array
## np.bool_ is NumPy's boolean data type (stores True/False values)
arr_bool = np.array([True, False, True], dtype=np.bool_)

print("Boolean array:", arr_bool)
print("Boolean array dtype:", arr_bool.dtype)

保存并运行脚本。

python main.py

输出将显示布尔数组及其对应的数据类型。

Boolean array: [ True False  True]
Boolean array dtype: bool

你还可以使用 np.issubdtype() 函数来检查一个数据类型是否属于一个通用类别(如整数或浮点数)。这对于编写可以处理多种数值类型的函数很有帮助。

总结

在本实验中,你学习了 NumPy 中处理数据类型的基本知识。你现在已经了解:

  • 什么是 NumPy 数组,以及为什么它们比 Python 列表更高效
  • 如何使用 np.array()np.arange() 创建数组
  • 如何使用 .dtype 属性检查数组的数据类型
  • 如何在创建数组时使用 dtype 参数指定数据类型
  • 如何使用 .astype() 方法转换数组的数据类型
  • 不同数据类型(int32, int64, float32, float64)的内存影响
  • 如何使用布尔数组进行过滤和逻辑运算

扎实掌握数据类型对于使用 NumPy 编写高效准确的数值代码至关重要。选择正确的数据类型会显著影响你的数据分析项目中的内存使用和计算性能。