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

NumPy 详解

NumPy 详解

NumPy(Numerical Python)是 Python 科学计算的核心库,提供高性能的多维数组对象和计算工具。它是 Pandas、SciPy、Matplotlib 等库的基础。


1. 核心:ndarray 数组

NumPy 的核心是 ndarray(N-dimensional array)对象:

  • 同质数据:所有元素类型相同
  • 高效存储:连续内存块存储
  • 向量化操作:避免显式循环

创建数组

import numpy as np# 从列表创建
arr = np.array([1, 2, 3, 4]) # 特殊数组
zeros = np.zeros((3, 4))      # 3x4全0数组
ones = np.ones((2, 3))        # 2x3全1数组
empty = np.empty((2, 2))      # 未初始化数组
arange = np.arange(0, 10, 2)  # [0, 2, 4, 6, 8]
linspace = np.linspace(0, 1, 5) # [0., 0.25, 0.5, 0.75, 1.]

2. 数组属性
arr = np.array([[1, 2, 3], [4, 5, 6]])print(arr.ndim)    # 维度数: 2
print(arr.shape)   # 形状: (2, 3)
print(arr.size)    # 元素总数: 6
print(arr.dtype)   # 元素类型: int64
print(arr.itemsize) # 元素字节大小: 8

3. 数组索引与切片
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 基本索引
print(arr[0, 1])   # 2# 切片
print(arr[:2, 1:]) # [[2,3],[5,6]]# 布尔索引
mask = arr > 4
print(arr[mask])   # [5,6,7,8,9]# 花式索引
print(arr[[0, 2]]) # [[1,2,3],[7,8,9]]

4. 数组操作

形状操作

arr = np.arange(6).reshape(2, 3)  # 改变形状
flat = arr.flatten()               # 展平为一维

数组运算

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])print(a + b)   # [5,7,9]
print(a * 2)   # [2,4,6]
print(np.dot(a, b))  # 点积: 32

广播机制(不同形状数组运算):

a = np.array([[1,2], [3,4]])
b = np.array([10, 20])print(a + b)  # [[11,22],[13,24]]

5. 数学函数
arr = np.array([1.0, 4.0, 9.0])print(np.sqrt(arr))   # [1., 2., 3.]
print(np.exp(arr))    # 指数计算
print(np.sin(arr))    # 三角函数
print(np.log(arr))    # 自然对数

6. 统计函数
arr = np.arange(12).reshape(3,4)print(np.sum(arr))        # 总和: 66
print(np.mean(arr, axis=0)) # 列均值: [4,5,6,7]
print(np.max(arr, axis=1)) # 行最大值: [3,7,11]
print(np.std(arr))        # 标准差

7. 数组操作函数

拼接

a = np.array([[1,2], [3,4]])
b = np.array([[5,6]])# 垂直拼接
c = np.vstack((a, b))  # [[1,2],[3,4],[5,6]]
# 水平拼接
d = np.hstack((a, b.T)) # [[1,2,5],[3,4,6]]

分割

arr = np.arange(9).reshape(3,3)
result = np.hsplit(arr, 3)  # 水平分割成3份

转置

arr = np.arange(6).reshape(2,3)
print(arr.T)  # [[0,3],[1,4],[2,5]]

8. 线性代数
A = np.array([[1,2], [3,4]])
B = np.array([[5,6], [7,8]])# 矩阵乘法
print(np.dot(A, B))  # 或 A @ B# 求逆矩阵
inv_A = np.linalg.inv(A)# 特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)

9. 随机数生成
# 均匀分布
np.random.rand(2,3)     # [0,1)区间
np.random.uniform(0,10) # [0,10)区间# 正态分布
np.random.randn(2,3)    # 标准正态
np.random.normal(0,1,10)# 均值为0,标准差为1# 随机整数
np.random.randint(0, 10, size=5) # [0,10)的5个整数# 随机种子(重现结果)
np.random.seed(42)

10. 文件操作
# 保存为二进制文件
np.save('data.npy', arr)
loaded_arr = np.load('data.npy')# 文本文件
np.savetxt('data.txt', arr, delimiter=',')
arr_from_txt = np.loadtxt('data.txt', delimiter=',')

性能优势
  • 向量化操作:避免Python循环
  • 内存连续:高效缓存利用
  • 底层优化:使用C/C++/Fortran实现
  • 并行计算:支持SIMD指令
# 向量化 vs 循环 性能对比
import timearr = np.random.rand(1000000)# 向量化操作
start = time.time()
result = np.sin(arr)
print(f"向量化耗时: {time.time()-start:.6f}s")# Python循环
start = time.time()
result = [np.sin(x) for x in arr]
print(f"循环耗时: {time.time()-start:.6f}s")

应用场景
  • 数值计算(微积分、线性代数)
  • 数据处理与清洗
  • 图像处理(像素数组)
  • 机器学习(数据预处理)
  • 科学模拟(物理、生物等领域)

NumPy 是 Python 科学计算生态系统的基石,掌握它将大幅提升数据处理和科学计算能力!

http://www.xdnf.cn/news/15523.html

相关文章:

  • 职业发展:把工作“玩”成一场“自我升级”的游戏
  • Web前端性能优化原理与方法
  • 【kubernetes】--安全认证机制
  • xss-labs通关
  • 微服务架构升级:从Dubbo到SpringCloud的技术演进
  • PandaWiki与GitBook深度对比:AI时代的知识管理工具,选谁好?
  • 数据库(five day)——物物而不物于物,念念而不念于念。
  • 自适应哈希索引 和 日志缓冲区
  • 将Android Studio创建的一个apk工程放到Android15源码中构建
  • Jmeter+ant+jenkins接口自动化测试框架
  • docker run elasticsearch 报错
  • Spring之核心容器(IoC,DI,基本操作)详解
  • LeetCode|Day15|125. 验证回文串|Python刷题笔记
  • 912. 排序数组
  • 基于docker的redis集群
  • web前端用MVP模式搭建项目
  • Redisson实现限流器详解:从原理到实践
  • Vue加密文章密码 VuePress
  • 数据结构 双向链表(1)
  • 基于Matlab的四旋翼无人机动力学PID控制仿真
  • PyTorch 参数初始化详解:从理论到实践
  • ZYNQ Petalinux系统FLASH固化终极指南:创新多分区与双系统切换实战
  • 如何区分Bug是前端问题还是后端问题?
  • UE5多人MOBA+GAS 24、创建属性UI(一)
  • 插板式系统的“生命线“:EtherCAT分布式供电该如何实现?
  • 第13章 AB实验平台的建设
  • 解锁高效Excel技能:摆脱鼠标,快速编辑单元格
  • 凯伦股份融合复合瓦:新时代可焊接物理防腐金属屋面系统方案
  • Mysql练习
  • Linux命令大全