NumPy 中文教程

第一部分:基础认知与环境准备
第 1 章 全面认识 NumPy
第 2 章 开发环境搭建与验证
第二部分:核心对象 ——ndarray 数组
第 3 章 ndarray 数组基础
第 4 章 数组的形状与维度操作
第四部分:高级应用与数据处理
第 8 章 数组的排序、查找与去重
第 9 章 缺失值与异常值处理
第 10 章 随机数生成与抽样
第 11 章 文件读写与数据交互
第五部分:实战场景与落地应用
第 12 章 数值计算实战
第 13 章 数据分析实战
第六部分:优化进阶与问题解决
第 14 章 NumPy 性能优化
第 15 章 NumPy 进阶扩展
第 16 章 常见问题与解决方案

3.1 ndarray 数组的定义与创建

NumPy ndarray数组创建与属性详解:从入门到精通

NumPy 中文教程

本教程全面讲解NumPy ndarray数组的定义、创建方法、核心属性和数据类型,涵盖np.array()函数使用、数据类型指定、ndim/shape/size/dtype/nbytes属性详解、数值类型如int8/float32、布尔和字符串类型,以及astype()类型转换与兼容性,适合Python新手快速上手。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

NumPy ndarray数组教程:定义、创建与属性详解

1. 引言

NumPy(Numerical Python)是Python科学计算的基础库,广泛应用于数据分析、机器学习等领域。其核心数据结构是ndarray(n维数组),支持高效的多维数据处理。本教程将详细讲解ndarray的定义、创建、属性和数据类型,帮助新手快速入门。

2. ndarray数组的定义与创建

ndarray是一个多维、同质的数组对象,用于存储数值数据。它类似于Python的列表,但提供了更快的运算和更丰富的功能。NumPy数组是静态类型的,这意味着所有元素必须是相同的数据类型(dtype)。

创建ndarray的基本方法是使用NumPy提供的函数,最常见的是np.array()

2.1 基础创建:np.array()

np.array()函数可以将Python列表、元组等序列转换为NumPy数组。这是创建数组的入门方法。

示例代码:

import numpy as np

# 从列表创建一维数组
arr1 = np.array([1, 2, 3, 4])
print("一维数组:", arr1)
# 输出: [1 2 3 4]

# 从嵌套列表创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print("二维数组:\n", arr2)
# 输出:
# [[1 2 3]
#  [4 5 6]]

2.2 数据类型指定

在创建数组时,可以通过dtype参数指定元素的数据类型,以优化内存使用和计算性能。如果不指定,NumPy会自动推断类型。

示例代码:

# 指定数据类型为float32
arr_float = np.array([1, 2, 3], dtype=np.float32)
print("float32数组:", arr_float)
print("数据类型:", arr_float.dtype)
# 输出: float32数组: [1. 2. 3.]
# 数据类型: float32

# 默认推断为int64(取决于系统)
arr_default = np.array([1, 2, 3])
print("默认数组:", arr_default.dtype)
# 输出: int64

3. 数组的核心属性

NumPy数组提供多个属性来访问其基本特征,这对于理解和操作数组至关重要。

3.1 ndim:维度数

ndim属性返回数组的维度数。例如,一维数组的ndim为1,二维数组为2。

示例代码:

arr = np.array([[1, 2, 3], [4, 5, 6]])
print("维度数:", arr.ndim)  # 输出: 2

3.2 shape:形状

shape属性返回一个元组,表示每个维度的大小。例如,一个2行3列的二维数组,shape为(2, 3)。

示例代码:

arr = np.array([[1, 2, 3], [4, 5, 6]])
print("形状:", arr.shape)  # 输出: (2, 3)

3.3 size:元素总数

size属性返回数组中元素的总数。它是形状元组中所有值的乘积。

示例代码:

arr = np.array([[1, 2, 3], [4, 5, 6]])
print("元素总数:", arr.size)  # 输出: 6

3.4 dtype:数据类型

dtype属性返回数组元素的数据类型,如int32float64等。这是NumPy数组的关键特性,确保数据一致性和效率。

示例代码:

arr = np.array([1.0, 2.0, 3.0])
print("数据类型:", arr.dtype)  # 输出: float64

3.5 nbytes:总字节数

nbytes属性返回数组数据占用的总字节数。它等于size乘以每个元素的字节数(由dtype决定)。

示例代码:

arr = np.array([1, 2, 3], dtype=np.int32)
print("总字节数:", arr.nbytes)  # 输出: 12 (3个元素 * 4字节/元素)

4. 数据类型(dtype)详解

dtype(数据类型)定义了数组中每个元素的类型,影响内存占用、精度和运算。NumPy支持多种数据类型,包括数值类型、布尔类型和字符串类型。

4.1 数值类型

数值类型用于存储整数或浮点数,常见的有:

  • int8: 8位有符号整数,范围-128到127。
  • int32: 32位有符号整数,范围约-2.1e9到2.1e9。
  • float32: 32位单精度浮点数,精度约6-7位小数。
  • float64: 64位双精度浮点数,精度约15-16位小数(默认浮点类型)。

示例代码:

# 创建不同数值类型的数组
int8_arr = np.array([1, 2, 3], dtype=np.int8)
int32_arr = np.array([100000, 200000], dtype=np.int32)
float32_arr = np.array([1.1, 2.2], dtype=np.float32)
float64_arr = np.array([3.14, 2.71], dtype=np.float64)  # 等同于默认

print("int8数组:", int8_arr, "dtype:", int8_arr.dtype)
print("float32数组:", float32_arr, "dtype:", float32_arr.dtype)

4.2 布尔类型

布尔类型用于存储True或False值,通常用bool表示(实际上是int8的子类)。

示例代码:

bool_arr = np.array([True, False, True], dtype=bool)
print("布尔数组:", bool_arr)  # 输出: [ True False  True]
print("dtype:", bool_arr.dtype)  # 输出: bool

4.3 字符串类型

字符串类型用于存储文本数据,使用str_或指定长度如U10(Unicode字符串,最多10个字符)。

示例代码:

str_arr = np.array(['hello', 'world'], dtype='U10')
print("字符串数组:", str_arr)  # 输出: ['hello' 'world']
print("dtype:", str_arr.dtype)  # 输出: <U10

5. 类型转换(astype())与类型兼容性

NumPy允许在数组之间转换数据类型,使用astype()方法。这在数据预处理或优化内存时很有用。

5.1 astype()方法

astype()返回一个新数组,将原数组元素转换为指定数据类型。注意:它是复制操作,原数组不变。

示例代码:

arr = np.array([1, 2, 3, 4], dtype=np.int32)
print("原数组:", arr, "dtype:", arr.dtype)

# 转换为float64
arr_float = arr.astype(np.float64)
print("转换后:", arr_float, "dtype:", arr_float.dtype)
# 输出: [1. 2. 3. 4.] dtype: float64

# 转换为int8(注意溢出)
arr_int8 = arr.astype(np.int8)
print("转换为int8:", arr_int8)  # 如果值超出范围,可能会截断

5.2 类型兼容性说明

  • 数值类型转换: 整数可以安全转换为浮点数(如int32到float64),但浮点数转整数可能丢失小数部分(四舍五入或截断)。
  • 溢出风险: 当转换到较小范围类型(如int32到int8)时,如果值超出目标范围,可能会发生溢出(未定义行为)。
  • 布尔转换: 非零数值转换为True,零转换为False;布尔值转数值时,True为1,False为0。
  • 字符串转换: 数值可以转换为字符串,但反向转换可能失败或需要解析。

示例代码:

# 兼容性示例
arr = np.array([1.5, 2.7, 3.0])
# 浮点数转整数(四舍五入)
arr_int = arr.astype(np.int32)
print("浮点数转整数:", arr_int)  # 输出: [1 2 3]

# 布尔转换
bool_arr = np.array([0, 1, 2], dtype=bool)
print("布尔转换:", bool_arr)  # 输出: [False  True  True]

6. 总结

本教程详细介绍了NumPy ndarray数组的核心概念:从定义和创建(特别是np.array()函数),到核心属性如ndim、shape、size、dtype和nbytes,再深入数据类型dtype,包括数值类型(int8/int32/float32/float64)、布尔类型和字符串类型,最后讲解了类型转换方法astype()及其兼容性问题。

通过实践这些示例,新手可以快速掌握NumPy数组的基础,为后续的科学计算任务打下坚实基础。NumPy的强大功能使得数据处理更加高效和便捷,建议多练习以熟悉这些概念。

进一步学习: 探索NumPy的其他功能,如数组运算、索引、切片和广播,以充分利用其在Python中的数据科学能力。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包