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

NumPy -数组运算与操作

数组运算与操作

目录

  • 算术运算
  • 比较运算
  • 逻辑运算
  • 数学函数
  • 数组操作
  • 实际应用示例

算术运算

基本算术运算

import numpy as npa = np.array([1, 2, 3, 4, 5])
b = np.array([10, 20, 30, 40, 50])# 加法
print(f"a + b: {a + b}")# 减法
print(f"a - b: {a - b}")# 乘法(元素级)
print(f"a * b: {a * b}")# 除法
print(f"b / a: {b / a}")# 幂运算
print(f"a ** 2: {a ** 2}")# 取模
print(f"b % a: {b % a}")# 整除
print(f"b // a: {b // a}")

广播运算

import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6]])# 标量运算
print(f"arr + 10:\n{arr + 10}")
print(f"arr * 2:\n{arr * 2}")
print(f"arr ** 2:\n{arr ** 2}")# 数组与数组运算
arr2 = np.array([10, 20, 30])
print(f"\narr + arr2:\n{arr + arr2}")

累积运算

import numpy as nparr = np.array([1, 2, 3, 4, 5])# 累积和
print(f"累积和: {arr.cumsum()}")# 累积积
print(f"累积积: {arr.cumprod()}")# 二维数组累积
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print(f"\n数组:\n{arr_2d}")
print(f"按行累积和:\n{arr_2d.cumsum(axis=0)}")
print(f"按列累积和:\n{arr_2d.cumsum(axis=1)}")

比较运算

基本比较

import numpy as npa = np.array([1, 2, 3, 4, 5])
b = np.array([5, 4, 3, 2, 1])# 比较运算返回布尔数组
print(f"a > b: {a > b}")
print(f"a >= b: {a >= b}")
print(f"a < b: {a < b}")
print(f"a <= b: {a <= b}")
print(f"a == b: {a == b}")
print(f"a != b: {a != b}")

比较函数

import numpy as nparr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])# 检查所有元素是否满足条件
print(f"所有元素 > 0: {np.all(arr > 0)}")
print(f"所有元素 < 5: {np.all(arr < 5)}")# 检查是否有元素满足条件
print(f"有元素 > 8: {np.any(arr > 8)}")
print(f"有元素 < 0: {np.any(arr < 0)}")# 比较两个数组
a = np.array([1, 2, 3])
b = np.array([1, 2, 4])
print(f"\na == b 的所有元素: {np.all(a == b)}")
print(f"a == b 的任意元素: {np.any(a == b)}")

逻辑运算

布尔逻辑运算

import numpy as npa = np.array([True, False, True, False])
b = np.array([True, True, False, False])# 逻辑与
print(f"a & b: {a & b}")# 逻辑或
print(f"a | b: {a | b}")# 逻辑非
print(f"~a: {~a}")# 逻辑异或
print(f"a ^ b: {a ^ b}")# 数值数组的逻辑运算
x = np.array([1, 2, 3, 4, 5])
y = np.array([5, 4, 3, 2, 1])print(f"\n(x > 2) & (y < 4): {(x > 2) & (y < 4)}")
print(f"(x > 3) | (y < 2): {(x > 3) | (y < 2)}")

条件函数

import numpy as np# where 函数
arr = np.array([1, 2, 3, 4, 5])
result = np.where(arr > 3, arr, 0)
print(f"where(arr > 3, arr, 0): {result}")# 复杂条件
x = np.array([1, 2, 3, 4, 5])
y = np.array([6, 7, 8, 9, 10])
condition = np.array([True, False, True, False, True])
result = np.where(condition, x, y)
print(f"\nwhere(condition, x, y): {result}")

数学函数

基本数学函数

import numpy as nparr = np.array([1, 4, 9, 16, 25])# 平方根
print(f"sqrt: {np.sqrt(arr)}")# 平方
print(f"square: {np.square(arr)}")# 指数
print(f"exp: {np.exp([1, 2, 3])}")# 对数
print(f"log: {np.log([1, np.e, np.e**2])}")
print(f"log10: {np.log10([1, 10, 100])}")
print(f"log2: {np.log2([1, 2, 4, 8])}")# 幂函数
arr = np.array([2, 3, 4])
print(f"\npower(2, arr): {np.power(2, arr)}")

三角函数

import numpy as nparr = np.array([0, np.pi/4, np.pi/2, np.pi])# 三角函数
print(f"sin: {np.sin(arr)}")
print(f"cos: {np.cos(arr)}")
print(f"tan: {np.tan(arr)}")# 反三角函数
arr_sin = np.array([0, 0.5, 1])
print(f"\narcsin: {np.arcsin(arr_sin)}")
print(f"arccos: {np.arccos(arr_sin)}")
print(f"arctan: {np.arctan(arr_sin)}")

舍入函数

import numpy as nparr = np.array([1.23, 4.56, 7.89, 10.11])# 四舍五入
print(f"around: {np.around(arr)}")
print(f"around(1): {np.around(arr, 1)}")# 向下取整
print(f"floor: {np.floor(arr)}")# 向上取整
print(f"ceil: {np.ceil(arr)}")# 截断
print(f"trunc: {np.trunc(arr)}")

数组操作

统计函数

import numpy as nparr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])print(f"数组:\n{arr}")# 求和
print(f"\n总和: {arr.sum()}")
print(f"每行和: {arr.sum(axis=1)}")
print(f"每列和: {arr.sum(axis=0)}")# 均值
print(f"\n均值: {arr.mean()}")
print(f"每行均值: {arr.mean(axis=1)}")
print(f"每列均值: {arr.mean(axis=0)}")# 标准差和方差
print(f"\n标准差: {arr.std()}")
print(f"方差: {arr.var()}")# 最大值和最小值
print(f"\n最大值: {arr.max()}")
print(f"最小值: {arr.min()}")
print(f"最大值位置: {arr.argmax()}")
print(f"最小值位置: {arr.argmin()}")

数组操作函数

import numpy as nparr = np.array([1, 2, 3, 4, 5])# 翻转
print(f"翻转: {np.flip(arr)}")# 排序
arr_unsorted = np.array([3, 1, 4, 1, 5, 9, 2, 6])
print(f"\n排序: {np.sort(arr_unsorted)}")# 去重
arr_dup = np.array([1, 2, 2, 3, 3, 3, 4])
print(f"\n去重: {np.unique(arr_dup)}")# 连接数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(f"\n连接: {np.concatenate([a, b])}")

实际应用示例

示例 1:数据归一化

import numpy as np# 创建数据
data = np.random.randn(100, 5)
print(f"原始数据形状: {data.shape}")# Z-score 归一化
data_normalized = (data - data.mean(axis=0)) / data.std(axis=0)
print(f"归一化后均值: {data_normalized.mean(axis=0)}")
print(f"归一化后标准差: {data_normalized.std(axis=0)}")# Min-Max 归一化
data_minmax = (data - data.min(axis=0)) / (data.max(axis=0) - data.min(axis=0))
print(f"\nMin-Max 归一化后最小值: {data_minmax.min(axis=0)}")
print(f"Min-Max 归一化后最大值: {data_minmax.max(axis=0)}")

示例 2:矩阵运算

import numpy as np# 创建矩阵
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])# 矩阵加法
print(f"A + B:\n{A + B}")# 矩阵乘法(元素级)
print(f"\nA * B:\n{A * B}")# 矩阵点积
print(f"\nA @ B:\n{A @ B}")
print(f"np.dot(A, B):\n{np.dot(A, B)}")# 矩阵转置
print(f"\nA.T:\n{A.T}")

示例 3:信号处理

import numpy as np# 创建信号
t = np.linspace(0, 2*np.pi, 100)
signal = np.sin(t) + 0.5 * np.sin(3*t)# 计算信号能量
energy = np.sum(signal ** 2)
print(f"信号能量: {energy}")# 计算信号功率
power = np.mean(signal ** 2)
print(f"信号功率: {power}")# 计算信号的 RMS(均方根)
rms = np.sqrt(np.mean(signal ** 2))
print(f"信号 RMS: {rms}")# 信号的峰值
peak = np.max(np.abs(signal))
print(f"信号峰值: {peak}")

总结

数组运算与操作要点:

  1. 算术运算:+, -, *, /, **, %, //
  2. 比较运算:>, <, ==, !=, >=, <=
  3. 逻辑运算:&, |, ~, ^
  4. 数学函数:sqrt, exp, log, sin, cos 等
  5. 统计函数:sum, mean, std, var, max, min
  6. 数组操作:sort, unique, flip, concatenate

http://www.dtcms.com/a/581776.html

相关文章:

  • 中美最近军事新闻邯郸网站优化公司
  • windows本机vscode通过ssh免密登录远程linux服务器 git push/pull 免密
  • go语言网站开发教程门户网站是如何做引流的
  • SG-ECAT_S-TCP(EtherCAT 转 ModbusTCP 网关)
  • 分享一些在C++中使用异常处理的最佳实践
  • 物流网站怎么开网络最好的运营商
  • 学习随笔-async和await
  • 祁阳做网站河南工程建设验收公示网
  • PCIe协议分析仪-VIAVI设置抓取ASPM协商过程
  • ThreadLocal 相关知识点
  • OSG新版GLSL语法全解析
  • 智守边界:入侵报警系统的主动防御时代
  • 为什么网站建设起来搜素不到电子商务网站建设考题
  • 济南网站建设是什么合肥seo网络营销推广
  • 【Hot100|4-LeetCode 283. 移动零 】
  • 操作系统拿着文件名查找磁盘文件的全过程
  • 【Hot100 | 6 LeetCode 15. 三数之和】
  • 哪些网站用wordpress建设银行网站总是崩溃
  • c#实现redis的调用与基础类
  • 【深度学习新浪潮】什么是投机解码?大模型推理优化的核心技术解析(含代码实操)
  • Verilog函数function
  • 做电商宠物带哪个网站最好网络营销方法的选择
  • 超融合系统七大核心技术详解
  • Spring Boot 2.7.18(最终 2.x 系列版本)1 - 技术选型:连接池技术选型对比;接口文档技术选型对比
  • 从0到1做一个“字母拼词”Unity小游戏(含源码/GIF)- 单词字母打乱及字母拼词填空逻辑
  • 记一次 Maven 3.8.3 无法下载 HTTP 仓库依赖的排查历程
  • Linux网络初始及网络通信基本原理
  • 免费学软件的自学网站微信app制作
  • Foundation 模态框
  • 赣州深科网站建设深圳商城网站设计电话