NumPy -数组运算与操作

数组运算与操作

目录


算术运算

基本算术运算

python 复制代码
import numpy as np

a = 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}")

广播运算

python 复制代码
import numpy as np

arr = 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}")

累积运算

python 复制代码
import numpy as np

arr = 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)}")

比较运算

基本比较

python 复制代码
import numpy as np

a = 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}")

比较函数

python 复制代码
import numpy as np

arr = 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)}")

逻辑运算

布尔逻辑运算

python 复制代码
import numpy as np

a = 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)}")

条件函数

python 复制代码
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}")

数学函数

基本数学函数

python 复制代码
import numpy as np

arr = 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)}")

三角函数

python 复制代码
import numpy as np

arr = 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)}")

舍入函数

python 复制代码
import numpy as np

arr = 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)}")

数组操作

统计函数

python 复制代码
import numpy as np

arr = 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()}")

数组操作函数

python 复制代码
import numpy as np

arr = 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:数据归一化

python 复制代码
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:矩阵运算

python 复制代码
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:信号处理

python 复制代码
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

相关推荐
云和数据.ChenGuang21 小时前
SyntaxError: Non-UTF-8 code starting
人工智能·python·numpy
景彡先生5 天前
Python NumPy广播机制详解:从原理到实战,数组运算的“隐形翅膀”
开发语言·python·numpy
冰糖拌面5 天前
trimesh库初步接触
numpy
云烟成雨TD8 天前
NumPy 2.x 完全指南【四十二】线性代数之向量运算
python·机器学习·numpy
做科研的周师兄8 天前
【机器学习入门】9.2:感知机 Python 实践代码模板(苹果香蕉分类任务适配)
人工智能·python·学习·机器学习·分类·数据挖掘·numpy
全栈探索者8 天前
numpy基础
python·数据分析·numpy
代码AI弗森11 天前
Python × NumPy」 vs 「JavaScript × TensorFlow.js」生态全景图
javascript·python·numpy
犽戾武12 天前
1. 简单回顾Numpy神经网络
人工智能·神经网络·numpy
懒惰蜗牛13 天前
Day10:Python实现Excel自动汇总
python·numpy·pandas·pip·1024程序员节·python读写excel