NumPy 中文教程

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

3.2 快速创建特殊数组

NumPy高级教程:快速创建特殊数组的完整指南

NumPy 中文教程

本教程详细介绍了NumPy中快速创建特殊数组的函数,包括固定值数组、空数组、单位矩阵等,通过示例代码帮助初学者轻松掌握。

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

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

了解更多

NumPy快速创建特殊数组教程

引言

NumPy是Python中用于科学计算的核心库,它提供了高效的数组操作功能。在数据处理和机器学习中,快速创建特殊数组是基础且关键的技能。本教程将详细介绍NumPy中的多个常用函数,帮助您轻松构建固定值数组、空数组、单位矩阵等特殊数组。这些函数不仅节省时间,还能提高代码的可读性和性能。

固定值数组

固定值数组是指所有元素都相同的数组,NumPy提供了几个便捷函数来创建这类数组。

np.zeros()

np.zeros() 创建一个所有元素都为0的数组。语法为 np.zeros(shape, dtype=float),其中 shape 指定数组的形状(如整数或元组),dtype 指定数据类型(可选,默认为float)。

示例代码:

import numpy as np

# 创建一个形状为 (3, 4) 的全0数组
arr = np.zeros((3, 4))
print(arr)
# 输出:
# [[0. 0. 0. 0.]
#  [0. 0. 0. 0.]
#  [0. 0. 0. 0.]]

# 创建一个一维数组,长度为5,数据类型为整数
arr_int = np.zeros(5, dtype=int)
print(arr_int)  # 输出:[0 0 0 0 0]

用途: 常用于初始化数组或作为计算的起点。

np.ones()

np.ones() 类似于 np.zeros(),但创建一个所有元素都为1的数组。语法为 np.ones(shape, dtype=float)

示例代码:

import numpy as np

# 创建一个形状为 (2, 3) 的全1数组
arr = np.ones((2, 3))
print(arr)
# 输出:
# [[1. 1. 1.]
#  [1. 1. 1.]]

# 创建一个一维数组,数据类型为浮点数
arr_float = np.ones(4, dtype=float)
print(arr_float)  # 输出:[1. 1. 1. 1.]

用途: 用于需要单位值的情况,如计算均值或标准化。

np.full()

np.full() 创建一个具有指定值的数组,可以自定义值。语法为 np.full(shape, fill_value, dtype=None),其中 fill_value 是要填充的值。

示例代码:

import numpy as np

# 创建一个形状为 (3, 3) 的数组,所有元素为7
arr = np.full((3, 3), 7)
print(arr)
# 输出:
# [[7 7 7]
#  [7 7 7]
#  [7 7 7]]

# 创建一个一维数组,长度为3,填充值为2.5,数据类型为浮点数
arr_custom = np.full(3, 2.5, dtype=float)
print(arr_custom)  # 输出:[2.5 2.5 2.5]

用途: 适用于需要特定初始化值或常数的场景。

空数组与单位矩阵

这些函数用于创建未初始化的数组或单位矩阵,常用于快速分配内存或线性代数计算。

np.empty()

np.empty() 创建一个未初始化的数组,其元素值未定义(可能包含随机值)。语法为 np.empty(shape, dtype=float)。优点在于速度比 np.zeros() 快,但需谨慎使用,以避免未定义行为。

示例代码:

import numpy as np

# 创建一个形状为 (2, 2) 的空数组
arr = np.empty((2, 2))
print(arr)  # 输出可能为随机值,如:[[1.234e-12 2.345e-10]
            #                      [3.456e-09 4.567e-08]]

用途: 当不需要初始值且追求性能时使用,但通常在计算前会填充值。

np.eye()

np.eye() 创建一个单位矩阵,即主对角线为1,其他元素为0的方阵。语法为 np.eye(N, M=None, k=0, dtype=float),其中 N 是行数,M 是列数(可选,默认等于 N),k 控制对角线的偏移。

示例代码:

import numpy as np

# 创建一个3x3的单位矩阵
arr = np.eye(3)
print(arr)
# 输出:
# [[1. 0. 0.]
#  [0. 1. 0.]
#  [0. 0. 1.]]

# 创建一个4x2的矩阵,对角线偏移1
arr_offset = np.eye(4, 2, k=1)
print(arr_offset)
# 输出:
# [[0. 0.]
#  [1. 0.]
#  [0. 1.]
#  [0. 0.]]

用途: 在线性代数中,单位矩阵常用于矩阵乘法或求逆运算。

np.identity()

np.identity() 类似于 np.eye(),但专门用于创建方阵单位矩阵。语法为 np.identity(n, dtype=float),其中 n 是矩阵的维度(必须为整数)。

示例代码:

import numpy as np

# 创建一个4x4的单位矩阵
arr = np.identity(4)
print(arr)
# 输出:
# [[1. 0. 0. 0.]
#  [0. 1. 0. 0.]
#  [0. 0. 1. 0.]
#  [0. 0. 0. 1.]]

用途: 当需要严格方阵单位矩阵时,比 np.eye() 更简洁。

数值范围数组

这些函数用于生成数值序列,适用于数据采样和间隔计算。

np.arange()

np.arange() 类似于Python的 range(),但返回一个NumPy数组。语法为 np.arange(start, stop, step, dtype=None)

示例代码:

import numpy as np

# 创建一个从0到9的数组,步长为1
arr = np.arange(10)
print(arr)  # 输出:[0 1 2 3 4 5 6 7 8 9]

# 创建一个从2到10,步长为2的数组
arr_step = np.arange(2, 11, 2)
print(arr_step)  # 输出:[2 4 6 8 10]

# 创建一个浮点数序列
arr_float = np.arange(0.0, 1.0, 0.2)
print(arr_float)  # 输出:[0.  0.2 0.4 0.6 0.8]

用途: 用于生成整数或浮点数的序列,适用于循环或索引。

np.linspace()

np.linspace() 创建一个在指定区间内等间隔的数值序列。语法为 np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None),其中 num 是元素数量。

示例代码:

import numpy as np

# 创建一个从0到1的10个等间隔点
arr = np.linspace(0, 1, 10)
print(arr)
# 输出:[0.         0.11111111 0.22222222 0.33333333 0.44444444
#        0.55555556 0.66666667 0.77777778 0.88888889 1.        ]

# 创建一个从-5到5的5个点,包括端点
arr_endpoint = np.linspace(-5, 5, 5, endpoint=True)
print(arr_endpoint)  # 输出:[-5.  -2.5  0.   2.5  5. ]

用途: 用于采样或插值计算,如函数绘制或数值积分。

np.logspace()

np.logspace() 在对数尺度上创建等间隔的数值序列。语法为 np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None),其中 base 是对数的底数。

示例代码:

import numpy as np

# 创建一个从10^0到10^2的5个点,对数尺度
arr = np.logspace(0, 2, 5)
print(arr)
# 输出:[  1.           3.16227766  10.          31.6227766  100.        ]

# 创建一个以2为底的对数序列
arr_base = np.logspace(0, 3, 4, base=2)
print(arr_base)  # 输出:[1. 2. 4. 8.]

用途: 适用于需要对数分布的数值,如频率分析或指数增长模型。

对角数组

np.diag() 可以从对角线创建数组或从数组提取对角线。语法为 np.diag(v, k=0),其中 v 可以是一维数组(提取对角线)或二维数组(提取对角线)。

示例代码:

import numpy as np

# 从一维数组创建对角矩阵
arr = np.diag([1, 2, 3])
print(arr)
# 输出:
# [[1 0 0]
#  [0 2 0]
#  [0 0 3]]

# 从二维数组提取主对角线
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
diag_elements = np.diag(matrix)
print(diag_elements)  # 输出:[1 5 9]

# 偏移对角线
arr_offset = np.diag([1, 2, 3], k=1)
print(arr_offset)
# 输出:
# [[0 1 0 0]
#  [0 0 2 0]
#  [0 0 0 3]
#  [0 0 0 0]]

用途: 在线性代数中,用于处理对角矩阵或提取对角元素。

重复数组

np.tile() 重复一个数组以创建新数组。语法为 np.tile(A, reps),其中 A 是输入数组,reps 指定重复次数。

示例代码:

import numpy as np

# 重复一个一维数组
arr = np.array([1, 2])
tiled_arr = np.tile(arr, 3)
print(tiled_arr)  # 输出:[1 2 1 2 1 2]

# 重复一个二维数组
matrix = np.array([[1, 2], [3, 4]])
tiled_matrix = np.tile(matrix, (2, 3))
print(tiled_matrix)
# 输出:
# [[1 2 1 2 1 2]
#  [3 4 3 4 3 4]
#  [1 2 1 2 1 2]
#  [3 4 3 4 3 4]]

用途: 用于扩展或复制数组,适用于图像处理或数据增强。

总结

本教程详细介绍了NumPy中快速创建特殊数组的多种函数。通过掌握这些函数,您可以高效地初始化和处理数组,提升数据科学和机器学习项目的效率。建议在实际项目中多加练习,加深理解。NumPy的强大功能远不止于此,继续学习可以解锁更多高级操作。

进阶提示

  • 结合多个函数使用,例如先用 np.zeros() 初始化,再用 np.full() 填充特定区域。
  • 注意数据类型的选择,以避免不必要的转换和内存浪费。
  • 在实际应用中,考虑性能需求,如使用 np.empty() 提高速度,但需小心未初始化值。

希望本教程对您的NumPy学习有所帮助!如有问题,欢迎查阅NumPy官方文档或社区资源。

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

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

获取工具包