当前位置: 首页 > news >正文

【AI Study】第三天,NumPy(4)- 核心功能

NumPy 核心功能:科学计算的强大工具

  • 【AI Study】第三天,NumPy
    • 【AI Study】8-1,同NumPy类似的类库
    • 【AI Study】8-2,知识图谱
    • 【AI Study】8-3,基础知识
    • 【AI Study】8-4,核心功能
    • 【AI Study】8-5,高级应用
    • 【AI Study】8-6,最佳实践
    • 【AI Study】8-7,进阶学习
    • 【AI Study】8-8,实用技巧

文章要点

  • NumPy 的数学运算功能:基本运算、统计函数和线性代数
  • 数组操作进阶:广播机制、高级索引和排序搜索
  • 文件操作:文本和二进制文件的读写
  • 实用的代码示例和性能优化建议

引言

NumPy 不仅提供了基础的数组操作,还包含了丰富的数学运算、高级数组操作和文件处理功能。这些核心功能使得 NumPy 成为科学计算和数据分析中不可或缺的工具。本文将深入探讨 NumPy 的核心功能,帮助读者掌握这些强大的工具。

1. 数学运算

1.1 基本运算

NumPy 支持对数组进行各种基本数学运算:

import numpy as np# 创建示例数组
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([5, 6, 7, 8])# 基本算术运算
print("加法:", arr1 + arr2)        # 输出: [ 6  8 10 12]
print("减法:", arr2 - arr1)        # 输出: [4 4 4 4]
print("乘法:", arr1 * arr2)        # 输出: [ 5 12 21 32]
print("除法:", arr2 / arr1)        # 输出: [5.  3.  2.33333333 2. ]# 幂运算
print("平方:", arr1 ** 2)          # 输出: [ 1  4  9 16]# 矩阵乘法
mat1 = np.array([[1, 2], [3, 4]])
mat2 = np.array([[5, 6], [7, 8]])
print("矩阵乘法:\n", np.dot(mat1, mat2))

1.2 统计函数

NumPy 提供了丰富的统计函数:

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])# 基本统计量
print("平均值:", np.mean(arr))     # 输出: 5.0
print("中位数:", np.median(arr))   # 输出: 5.0
print("标准差:", np.std(arr))      # 输出: 2.581988897471611
print("方差:", np.var(arr))        # 输出: 6.666666666666667# 最大最小值
print("最大值:", np.max(arr))      # 输出: 9
print("最小值:", np.min(arr))      # 输出: 1# 分位数
print("25%分位数:", np.percentile(arr, 25))  # 输出: 3.0
print("75%分位数:", np.percentile(arr, 75))  # 输出: 7.0

1.3 数学函数

NumPy 提供了常用的数学函数:

arr = np.array([0, np.pi/4, np.pi/2])# 三角函数
print("正弦:", np.sin(arr))
print("余弦:", np.cos(arr))
print("正切:", np.tan(arr))# 指数和对数
print("指数:", np.exp(arr))
print("自然对数:", np.log(arr + 1))
print("以2为底的对数:", np.log2(arr + 1))

1.4 线性代数运算

NumPy 的线性代数模块提供了强大的矩阵运算功能:

from numpy import linalg# 创建矩阵
A = np.array([[1, 2], [3, 4]])# 计算行列式
det = linalg.det(A)
print("行列式:", det)# 计算特征值和特征向量
eigenvals, eigenvecs = linalg.eig(A)
print("特征值:", eigenvals)
print("特征向量:\n", eigenvecs)# 矩阵分解
# QR分解
Q, R = linalg.qr(A)
print("QR分解:\nQ:\n", Q, "\nR:\n", R)# SVD分解
U, S, V = linalg.svd(A)
print("SVD分解:\nU:\n", U, "\nS:\n", S, "\nV:\n", V)

2. 数组操作进阶

2.1 广播机制

NumPy 的广播机制允许不同形状的数组进行运算:

# 广播示例
arr = np.array([[1, 2, 3],[4, 5, 6]])
scalar = 2# 标量与数组运算
print("数组乘以标量:\n", arr * scalar)# 不同形状数组的运算
arr1 = np.array([[1, 2, 3]])
arr2 = np.array([[1],[2]])
print("广播运算:\n", arr1 + arr2)

2.2 高级索引

NumPy 支持多种高级索引方式:

arr = np.array([[1, 2, 3],[4, 5, 6],[7, 8, 9]])# 整数数组索引
indices = np.array([0, 2])
print("整数数组索引:", arr[indices])# 布尔索引
mask = arr > 5
print("布尔索引:\n", arr[mask])# 组合索引
print("组合索引:", arr[0:2, [0, 2]])

2.3 数组排序与搜索

NumPy 提供了强大的排序和搜索功能:

arr = np.array([3, 1, 4, 1, 5, 9, 2, 6])# 排序
sorted_arr = np.sort(arr)
print("排序后:", sorted_arr)# 返回排序索引
indices = np.argsort(arr)
print("排序索引:", indices)# 搜索
print("最大值索引:", np.argmax(arr))
print("最小值索引:", np.argmin(arr))# 唯一值
unique_vals = np.unique(arr)
print("唯一值:", unique_vals)

3. 文件操作

3.1 文本文件读写

NumPy 提供了多种文本文件读写方法:

# 保存数组到文本文件
arr = np.array([[1, 2, 3],[4, 5, 6]])
np.savetxt('array.txt', arr, delimiter=',')# 从文本文件加载数组
loaded_arr = np.loadtxt('array.txt', delimiter=',')
print("加载的数组:\n", loaded_arr)# 使用 genfromtxt 处理缺失值
data = np.genfromtxt('data.txt', delimiter=',', filling_values=0)

3.2 二进制文件操作

对于大型数组,二进制文件操作更高效:

# 保存数组到二进制文件
arr = np.array([[1, 2, 3],[4, 5, 6]])
np.save('array.npy', arr)# 加载二进制文件
loaded_arr = np.load('array.npy')
print("加载的数组:\n", loaded_arr)# 保存多个数组
np.savez('arrays.npz', arr1=arr, arr2=arr*2)

最佳实践

  1. 使用向量化操作代替循环,提高性能
  2. 合理使用广播机制,避免不必要的数组复制
  3. 对于大型数组,优先使用二进制文件格式
  4. 注意数值精度,选择合适的数据类型
  5. 使用适当的数学函数,避免重复实现

总结

本文介绍了 NumPy 的核心功能,包括数学运算、高级数组操作和文件处理。这些功能使得 NumPy 成为科学计算和数据分析的强大工具。掌握这些核心功能,可以帮助我们更高效地进行数据分析和科学计算。

参考资源

  • NumPy 官方文档
  • NumPy 数学函数参考
  • NumPy 线性代数参考

相关文章:

  • 每日一篇博客:理解Linux动静态库
  • 3405. 统计恰好有 K 个相等相邻元素的数组数目
  • 【嵌入式】bit翻转
  • IndexedDB 深入解析
  • 如何迁移备份MongoDB数据库?mongodump导出 + mongorestore导入全解析
  • kettle好用吗?相较于国产ETL工具有哪些优劣之处?
  • 可观测性中的指标数据治理:指标分级、模型定义与消费体系让系统运行更透明!
  • 【AI Study】第四天,Pandas(7)- 实际应用
  • 单例模式:全局唯一实例的设计艺术
  • 第二课 数列极限的定义与性质
  • Node脚本开发含(删除、打包、移动、压缩)简化打包流程
  • 前端打断点
  • 代码随想录算法训练营day8
  • 微信二次开发,对接智能客服逻辑
  • Matplotlib快速入门
  • VS2017----配置opencv环境
  • SAST + IAST + DAST 全链路防护体系构建方案
  • 成组进位及其函数
  • HarmonyOS 5 鸿蒙多模态融合测试技术方案详解
  • MySQL学习(长期更新)
  • dedecms大气金融企业网站模板免费下载/网络营销方案例文
  • wordpress建手机网站/全球疫情最新数据消息
  • 网站如何做tag/广告推广怎么做最有效
  • 海口网站建设费用/seo网站优化方法
  • 网站整站源码下载工具/app推广平台接单渠道
  • 网站建设 紧急检查工作/策划方案