news 2026/5/1 10:35:05

Day 47:【99天精通Python】NumPy 进阶 - 维度变换与布尔索引

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day 47:【99天精通Python】NumPy 进阶 - 维度变换与布尔索引

Day 47:【99天精通Python】NumPy 进阶 - 维度变换与布尔索引

前言

欢迎来到第47天!

在昨天,我们已经掌握了 NumPy 数组的创建和基础运算。今天我们将继续深入,学习两个非常强大的功能:

  1. 维度变换:把一维的 12 个数字变成 3x4 的矩阵,或者反过来。这在图像处理(比如把图片拉平送入神经网络)中非常常见。
  2. 布尔索引 (Boolean Indexing):不通过下标,而是通过"条件"来取值。比如"找出所有不及格的分数"、“把所有负数变成0”。

这些技巧是数据清洗和预处理的核心技能。

本节内容:

  • reshape:改变形状
  • flattenvsravel:扁平化
  • 转置 (Transpose)
  • 数组拼接与分割
  • 布尔索引与花式索引
  • 实战练习:图像蒙版处理

一、维度变换

1.1 reshape:变身术

reshape可以改变数组的形状,但元素总数必须保持一致

importnumpyasnp# 创建一个 0-11 的一维数组arr=np.arange(12)print(arr)# 变成 3行4列matrix=arr.reshape(3,4)print(matrix)# 变成 2行6列print(arr.reshape(2,6))# 使用 -1 自动计算维度# 我只指定要 4 行,列数你帮我算print(arr.reshape(4,-1))# 结果是 4x3

1.2 Flatten:拍扁

将多维数组变回一维数组。

matrix=np.array([[1,2,3],[4,5,6]])# flatten: 返回一份拷贝 (修改不影响原数组)flat=matrix.flatten()flat[0]=999print(matrix[0,0])# 依然是 1# ravel: 返回视图 (View, 修改会影响原数组)view=matrix.ravel()view[0]=999print(matrix[0,0])# 变成了 999

1.3 转置 (Transpose)

矩阵的行变列,列变行。

matrix=np.arange(12).reshape(3,4)print(matrix)# [[ 0 1 2 3]# [ 4 5 6 7]# [ 8 9 10 11]]print(matrix.T)# [[ 0 4 8]# [ 1 5 9]# [ 2 6 10]# [ 3 7 11]]

二、数组拼接

在数据预处理时,我们经常需要把多个数据集拼在一起。

  • vstack(Vertical Stack): 垂直拼接 (增加行)
  • hstack(Horizontal Stack): 水平拼接 (增加列)
a=np.array([1,2,3])b=np.array([4,5,6])# 垂直拼接 (变成 2x3)print(np.vstack((a,b)))# [[1 2 3]# [4 5 6]]# 水平拼接 (变成 1x6)print(np.hstack((a,b)))# [1 2 3 4 5 6]

三、神奇的索引

3.1 布尔索引 (Boolean Indexing)

这是 NumPy 最性感的特性之一。我们可以传入一个布尔数组来筛选数据。

场景:找出所有大于 5 的数。

data=np.array([1,8,3,9,2,7])# 1. 生成布尔数组mask=data>5print(mask)# [False True False True False True]# 2. 利用 mask 筛选print(data[mask])# [8 9 7]# 3. 一步到位 (常用)print(data[data>5])

场景:把所有偶数替换为 0。

data[data%2==0]=0print(data)# [1 0 3 9 0 7]

3.2 花式索引 (Fancy Indexing)

使用整数数组作为索引,一次性取出多个不连续的值。

arr=np.arange(10)*10# [0, 10, 20, ..., 90]# 取出第 1, 3, 5 个元素indices=[1,3,5]print(arr[indices])# [10 30 50]

四、where 函数

np.where是 Excel 中IF函数的加强版。
语法:np.where(条件, 真值, 假值)

arr=np.array([10,20,30,40,50])# 如果大于 30,改为 1,否则为 0res=np.where(arr>30,1,0)print(res)# [0 0 0 1 1]# 如果大于 30,保持原值,否则改为 -1res2=np.where(arr>30,arr,-1)print(res2)# [-1 -1 -1 40 50]

五、实战练习

练习1:成绩清洗

有一个学生成绩数组scores,包含一些无效值(-1 表示缺考)。
请计算有效成绩(>=0)的平均分。

scores=np.array([85,90,-1,78,-1,60,92])# 筛选有效成绩valid_scores=scores[scores>=0]print(f"有效成绩:{valid_scores}")print(f"平均分:{np.mean(valid_scores):.2f}")

练习2:图像蒙版 (Mask) 模拟

假设一张图片是一个 5x5 的矩阵,数值 0-255。
请将所有亮度低于 100 的像素点(太暗的)全部提亮为 100。

# 生成随机图片数据img=np.random.randint(0,256,(5,5))print("原图:\n",img)# 处理:小于100的变成100img[img<100]=100print("处理后:\n",img)

六、小结

NumPy 进阶

变形 Shape

合并 Stack

索引 Index

reshape(m, n)

flatten() / ravel()

T (转置)

vstack (垂直)

hstack (水平)

布尔索引 arr[arr>5]

花式索引 arr[[1,3]]

where(cond, x, y)

关键要点

  1. reshape是改变数组形状的神器,记得用-1偷懒。
  2. 布尔索引是数据清洗的核心,一定要熟练掌握arr[condition]这种写法。
  3. np.where能轻松实现批量条件替换。

七、课后作业

  1. 矩阵标准化:创建一个 10x5 的随机矩阵。将每一列的数据减去该列的平均值(中心化处理)。(提示:利用广播机制)。
  2. 双重条件筛选:生成 1 到 100 的数组。筛选出所有能被 3 整除能被 5 整除的数。(提示:使用&运算符,注意括号(cond1) & (cond2))。
  3. One-hot 编码:有一个标签数组labels = [1, 0, 2, 1](类别总数为3)。请创建一个对应的 One-hot 矩阵(4x3),对应位置为 1,其余为 0。

下节预告

Day 48:数据分析 Pandas 入门- 终于到了重头戏!NumPy 虽然快,但看表格还是不直观。明天我们学习 Pandas 的 DataFrame,像操作 Excel 一样操作 Python 数据!


系列导航

  • 上一篇:Day 46 - 数据分析NumPy基础
  • 下一篇:Day 48 - 数据分析Pandas入门(待更新)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 5:47:17

FSMN VAD跨平台尝试:Windows系统部署可行性分析

FSMN VAD跨平台尝试&#xff1a;Windows系统部署可行性分析 1. 引言 1.1 技术背景与业务需求 语音活动检测&#xff08;Voice Activity Detection, VAD&#xff09;是语音信号处理中的关键前置模块&#xff0c;广泛应用于语音识别、会议转录、电话录音分析、音频剪辑等场景。…

作者头像 李华
网站建设 2026/5/1 6:51:34

实测Z-Image-Turbo 1步出图,质量竟然这么高?

实测Z-Image-Turbo 1步出图&#xff0c;质量竟然这么高&#xff1f; 1. 背景与目标 阿里通义推出的 Z-Image-Turbo 是一款基于扩散模型架构的高性能图像生成系统&#xff0c;主打“极速推理、高质量输出”的核心优势。其最大亮点在于支持仅用1步推理即可生成视觉效果出色的图…

作者头像 李华
网站建设 2026/5/1 8:17:35

Z-Image-Base生成多样性不足?采样参数调优教程

Z-Image-Base生成多样性不足&#xff1f;采样参数调优教程 1. 背景与问题提出 在使用阿里最新开源的文生图大模型 Z-Image-Base 进行图像生成时&#xff0c;许多用户反馈&#xff1a;尽管模型具备强大的语义理解与中文支持能力&#xff0c;但在默认配置下生成的图像存在多样性…

作者头像 李华
网站建设 2026/5/1 6:15:59

从单机到分布式:HY-MT1.5-7B扩展部署策略

从单机到分布式&#xff1a;HY-MT1.5-7B扩展部署策略 随着多语言交流需求的不断增长&#xff0c;高质量、低延迟的翻译服务成为智能应用的核心能力之一。混元翻译模型&#xff08;HY-MT&#xff09;系列作为面向多语言互译场景的先进模型&#xff0c;已在多个国际评测中展现出…

作者头像 李华
网站建设 2026/5/1 6:15:52

Qwen3-0.6B微调入门:云端GPU免环境,3步完成训练

Qwen3-0.6B微调入门&#xff1a;云端GPU免环境&#xff0c;3步完成训练 你是不是也遇到过这样的情况&#xff1a;想动手练一练大模型微调&#xff0c;结果公司GPU排队排到下周&#xff0c;自己笔记本跑PyTorch直接卡成幻灯片&#xff1f;别急&#xff0c;今天我来给你支个招—…

作者头像 李华
网站建设 2026/5/1 6:05:31

开发者入门必看:通义千问2.5-7B-Instruct镜像快速上手教程

开发者入门必看&#xff1a;通义千问2.5-7B-Instruct镜像快速上手教程 1. 引言 随着大模型技术的快速发展&#xff0c;越来越多开发者希望在本地或私有环境中部署高性能、可商用的语言模型。通义千问2.5-7B-Instruct作为阿里于2024年9月发布的Qwen2.5系列中的核心成员&#xf…

作者头像 李华