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

NumPy 常用操作详解汇总和实战示例

下面是 NumPy 常用操作详解汇总,包括数组创建、索引切片、数学运算、广播机制、聚合函数、线性代数等内容,并附有 示例代码


NumPy基本操作

1. 导入与基本配置

import numpy as np
np.set_printoptions(precision=3, suppress=True)  # 显示精度和关闭科学计数法

2. 数组创建

基本创建

a = np.array([1, 2, 3])           # 一维数组
b = np.array([[1, 2], [3, 4]])    # 二维数组

初始化函数

np.zeros((2, 3))                  # 全0数组
np.ones((3, 3))                   # 全1数组
np.full((2, 2), 7)                # 全7数组
np.eye(3)                         # 单位矩阵
np.arange(0, 10, 2)               # [0,2,4,6,8]
np.linspace(0, 1, 5)              # 线性等间距序列
np.random.rand(2, 3)              # [0,1) 的随机数
np.random.randint(0, 10, (2, 3))  # 整数随机数组

3. 数组索引与切片

一维

a = np.array([10, 20, 30, 40])
print(a[1])      # 20
print(a[-1])     # 40
print(a[1:3])    # [20, 30]

多维

b = np.array([[1, 2], [3, 4], [5, 6]])
print(b[0, 1])      # 2
print(b[1:, 0])     # [3 5]
print(b[:, 1])      # 第2列

布尔索引与花式索引

a = np.array([1, 2, 3, 4, 5])
print(a[a > 3])             # [4 5]
print(a[[0, 2, 4]])         # [1 3 5]

4. 数组操作

形状变换

a.reshape((2, 3))
a.flatten()                 # 展平
a.T                         # 转置
np.expand_dims(a, axis=0)  # 添加维度
np.squeeze()                # 删除单维

拼接与分割

np.concatenate([a, b], axis=0)
np.vstack([a, b])            # 垂直堆叠
np.hstack([a, b])            # 水平堆叠np.split(a, 2)               # 等分
np.array_split(a, 3)         # 不等分

5. 数学运算(逐元素)

a + b
a - b
a * b
a / b
np.sqrt(a)
np.exp(a)
np.log(a)
np.power(a, 2)

️ 6. 广播机制(Broadcasting)

a = np.array([[1], [2], [3]])    # 3x1
b = np.array([10, 20, 30])       # 1x3
c = a + b                        # 自动扩展成 3x3

7. 聚合函数(统计)

np.sum(a)
np.mean(a)
np.std(a)
np.var(a)
np.max(a)
np.min(a)
np.argmin(a)
np.argmax(a)
np.median(a)np.sum(a, axis=0)  # 按列
np.sum(a, axis=1)  # 按行

8. 线性代数操作

from numpy.linalg import inv, det, eig, norm, solveA = np.array([[1, 2], [3, 4]])
b = np.array([1, 2])inv(A)          # 逆矩阵
det(A)          # 行列式
eig(A)          # 特征值与特征向量
solve(A, b)     # 解 Ax = b
norm(A)         # 范数

9. 排序与去重

np.sort(a)                # 排序,不改变原数组
np.argsort(a)             # 排序索引
np.unique(a)              # 去重并排序

10. 逻辑操作

a > 3                     # 布尔数组
np.any(a > 3)
np.all(a < 10)
np.where(a > 3, 1, 0)     # 条件筛选

11. 性能与实用技巧

%timeit np.sum(np.arange(10000))     # IPython 中性能测试
a.copy()                              # 显式复制,避免引用
np.set_printoptions(threshold=1000)   # 控制打印长度

实战示例

下面是三个常见场景下 NumPy 的实用应用代码,包括:

  1. 数据分析(缺失值处理与标准化)
  2. 图像处理(灰度图像卷积)
  3. 机器学习(线性回归的最小二乘法实现)

1️、数据分析:缺失值处理 + 标准化

import numpy as np# 假设数据集中包含缺失值 np.nan
data = np.array([[1.0, 2.0, np.nan],[4.0, np.nan, 6.0],[7.0, 8.0, 9.0]
])# 计算每列均值,忽略 nan
col_means = np.nanmean(data, axis=0)# 用均值填充缺失值
inds = np.where(np.isnan(data))
data[inds] = np.take(col_means, inds[1])# 标准化(Z-score)
mean = np.mean(data, axis=0)
std = np.std(data, axis=0)
normalized_data = (data - mean) / stdprint("标准化后的数据:\n", normalized_data)

2️、图像处理:二维灰度图像卷积

import numpy as np
from scipy.signal import convolve2d
import matplotlib.pyplot as plt# 模拟一个 5x5 灰度图像
image = np.array([[10, 10, 10, 0, 0],[10, 10, 10, 0, 0],[10, 10, 10, 0, 0],[0,  0,  0, 10, 10],[0,  0,  0, 10, 10]
])# Sobel 边缘检测核
sobel_x = np.array([[-1, 0, 1],[-2, 0, 2],[-1, 0, 1]
])# 卷积
edge_x = convolve2d(image, sobel_x, mode='same', boundary='fill', fillvalue=0)plt.imshow(edge_x, cmap='gray')
plt.title("Edge Detection")
plt.colorbar()
plt.show()

3️、机器学习:线性回归(最小二乘解)

import numpy as np
import matplotlib.pyplot as plt# 模拟数据: y = 3x + 2 + noise
np.random.seed(42)
X = np.random.rand(100, 1)
y = 3 * X + 2 + 0.1 * np.random.randn(100, 1)# 增加偏置项(X -> [1, x])
X_b = np.hstack([np.ones_like(X), X])  # shape (100, 2)# 最小二乘解 θ = (XᵀX)^(-1)Xᵀy
theta_best = np.linalg.inv(X_b.T @ X_b) @ X_b.T @ yprint("模型参数:", theta_best.ravel())  # θ0 和 θ1# 可视化拟合
plt.scatter(X, y, label="Data")
plt.plot(X, X_b @ theta_best, color='red', label="Fitted Line")
plt.legend()
plt.show()

http://www.lryc.cn/news/590285.html

相关文章:

  • 泰语OCR识别技术方案
  • 【React Native】安装配置 Expo Router
  • STM32 ODR
  • obsidian1.8.10_win中文_Markdown编辑器_安装教程
  • 逆功率检测设备防逆流解决方案守护电网安全
  • 第五章 管道工程 5.4 管道安全质量控制
  • Uniswap V2/V3/V4简短说明
  • 功能测试和回归测试
  • 架构设计之计算高性能——单体服务器高性能
  • 更灵活方便的初始化、清除方法——fixture【pytest】
  • 使用Node搭建一个直播服务器,实时直播当前桌面
  • 获取印度股票数据API实例:NSE与BSE双市场对接指南
  • Python类中魔术方法(Magic Methods)完全指南:从入门到精通
  • [特殊字符]️ Snort 与 Suricata 入侵检测系统详解
  • 热点综述│高效泛化求解新范式:神经算子综述
  • IIS网站间歇性打不开暴力解决方法
  • 问题处理——qgroundcontrol强制全屏,怎么退出。
  • 20、鸿蒙Harmony Next开发:组件导航(Navigation)和页面路由(@ohos.router)
  • kafka3.6下载安装(传统架构/KRaft模式)+实例测试
  • JavaScript 文件下载功能实现原理解析
  • C++11迭代器改进:深入理解std::begin、std::end、std::next与std::prev
  • Apache SeaTunnel详解与部署(最新版本2.3.11)
  • 从混沌到秩序:数据科学的热力学第二定律破局——线性回归的熵减模型 × 最小二乘的能量最小化 × 梯度下降的负反馈控制系统,用物理定律重构智能算法的统一场论
  • 模型上下文协议(MCP)的工作流程、安全威胁与未来发展方向
  • Qt小组件 - 5 图片懒加载样例
  • 服务攻防-Java组件安全数据处理FastJsonJackSonXStream自动BP插件CVE漏洞
  • 算法穿上隐身衣:数据交易中数据黑箱与算法透明性的法律义务边界
  • 大数据方向研究生就业前景与竞争力分析
  • “重复”定义函数的睿智(Python/与ai助手“智普清言”深度交流)
  • 综合实验(重点:ACL)