NumPy 2.x 完全指南【二十一】元素重排操作

article/2025/8/27 19:11:05

文章目录

  • 1. 翻转
    • 1.1 fliplr
    • 1.2 fliplr
    • 1.3 flipud
  • 2. 滚动
    • 2.1 roll
    • 2.2 rot90

1. 翻转

1.1 fliplr

numpy.flip: 沿指定轴翻转数组元素顺序,返回视图,共享原数组内存。

函数定义:

def flip(m, axis=None)

参数说明:

  • m:输入的数组(支持任意维度)。
  • axis:指定翻转的轴(整数或元组)。若为 None,则默认翻转所有轴。

示例 1 ,翻转一维数组:

import numpy as np# 一维数组
arr_1d = np.array([1, 2, 3])
flipped_1d = np.flip(arr_1d)
print(flipped_1d)  # [3 2 1]
# 输出:
# [3 2 1]

一维数组只有一个 0 轴,没有指定 axis 参数时(None)也就是沿着 0 轴进行翻转,很容易理解,就是掉了个头:
在这里插入图片描述
二维数组有 0 轴和 1 轴,没有指定 axis 参数时,需要依次沿着所有的轴进行翻转:

  • 首先是 0 轴,当前维度的元素是行,需要翻转所有行。
  • 接着是 1 轴,当前维度的元素是列,需要翻转所有列。

在这里插入图片描述
示例 2 ,翻转二维数组:

# 二维数组
arr_2d = np.array([[1, 2],[3, 4]])
flipped_2d = np.flip(arr_2d)
print(flipped_2d)
# 输出:
# [[4 3]
#  [2 1]]# 中间过程:O 轴
# [[3 4]
#  [1 2]]

三维数组有 012 轴,也是按照同样的规则翻转:
在这里插入图片描述
示例 3 ,翻转三维数组:

# 三维数组
arr_3d = np.arange(8).reshape(2, 2, 2)
print(arr_3d)
# 输出:
# [[[0 1]
#   [2 3]]
#
#  [[4 5]
#   [6 7]]]
flipped = np.flip(arr_3d)
print(flipped)
# 输出:
# [[[7 6]
#   [5 4]]
#
#  [[3 2]
#   [1 0]]]# 中间过程:O 轴
# [[[4 5]
#   [6 7]]
#
#  [[0 1]
#   [2 3]]]# 中间过程:1 轴
# [[[6 7]
#   [4 5]]
#
#  [[2 3]
#   [0 1]]]

axis 是可选参数,用于指定翻转的维度,默认为 None(反转所有轴),可以是整数或元组类型。

示例 4 ,指定在一个轴上翻转:

# 二维数组
arr_2d = np.array([[1, 2],[3, 4]])
flipped_2d = np.flip(arr_2d, axis=1)  # 列
print(flipped_2d)
# 输出:
# [[2 1]
#  [4 3]]# 三维数组
arr_3d = np.arange(8).reshape(2, 2, 2)
print(arr_3d)
# 输出:
# [[[0 1]
#   [2 3]]
#
#  [[4 5]
#   [6 7]]]
flipped = np.flip(arr_3d, axis=1)  # 行
print(flipped)
# 输出:
# [[[2 3]
#   [0 1]]
#
#  [[6 7]
#   [4 5]]]

示例 5 ,指定在两个轴上翻转:

# 三维数组
arr_3d = np.arange(8).reshape(2, 2, 2)
print(arr_3d)
# 输出:
# [[[0 1]
#   [2 3]]
#
#  [[4 5]
#   [6 7]]]
flipped = np.flip(arr_3d, axis=(0, 1))  # 层、行
print(flipped)
# 输出:
# [[[6 7]
#   [4 5]]
#
#  [[2 3]
#   [0 1]]]# 中间过程:O 轴
# [[[4 5]
#   [6 7]]
#
#  [[0 1]
#   [2 3]]]

在计算机视觉中,就可以使用翻转函数实现翻转图像:
在这里插入图片描述
完整代码如下:

import numpy as np
import cv2
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
import platform# 跨平台字体配置方案
def config_chinese_font():"""自动适配不同操作系统的中文字体配置"""system = platform.system()# 候选字体列表(按优先级排序)font_candidates = {'Windows': ['Microsoft YaHei', 'SimHei'],  # 微软雅黑/黑体'Darwin': ['Arial Unicode MS', 'Songti SC'],  # MacOS字体'Linux': ['WenQuanYi Zen Hei']  # 文泉驿字体}# 根据系统类型选择候选字体fonts = font_candidates.get(system, ['sans-serif'])try:# 自动检测已安装字体available_fonts = [f.name for f in fm.fontManager.ttflist]valid_fonts = [f for f in fonts if f in available_fonts]if valid_fonts:plt.rcParams['font.sans-serif'] = valid_fontsprint(f"已设置中文字体: {valid_fonts[0]}")else:raise RuntimeError("未找到中文字体")except Exception as e:print(f"字体自动配置失败: {str(e)}, 将使用默认字体")plt.rcParams['axes.unicode_minus'] = False  # 解决负号显示问题def load_image(path):"""加载图像文件并转换颜色空间"""image = cv2.imread(path)if image is None:raise FileNotFoundError(f"图像文件 {path} 未找到")return cv2.cvtColor(image, cv2.COLOR_BGR2RGB)def plot_images(images, titles):"""可视化图像(自动处理中文标题)"""plt.figure(figsize=(15, 5))for i, (img, title) in enumerate(zip(images, titles)):plt.subplot(1, 3, i + 1)plt.imshow(img)plt.title(title, fontsize=12)  # 使用已配置的字体plt.axis('off')plt.tight_layout()plt.show()def main(image_path):# 初始化字体配置config_chinese_font()# 加载并处理图像try:original = load_image(image_path)print(f"成功加载图像: {original.shape} (HxWxC)")# 随机水平翻转 (50%概率)if np.random.rand() > 0.5:h_flip = np.flip(original, axis=1)flip_type = "水平翻转"else:h_flip = original.copy()flip_type = "原始图像"# 组合翻转combined_flip = np.flip(h_flip, axis=(0, 1))# 可视化结果plot_images([original, h_flip, combined_flip],["原始图像", flip_type, "组合翻转 (180度)"])except Exception as e:print(f"处理失败: {str(e)}")if __name__ == "__main__":# 使用实际图片路径main("QQ20250416-144551.jpg")  # 替换为您的图片路径

1.2 fliplr

numpy.fliplr():沿水平方向(列方向,即 axis=1)左右翻转二维及以上数组的元素(返回原数组的视图)。

函数定义:

def fliplr(m)

参数说明:

  • m:输入数组,必须至少是二维的。

等价操作:

  • m[:, ::-1]:通过切片语法直接反转列顺序。
  • np.flip(m, axis=1):使用更通用的 flip 函数指定轴。

示例 1 ,翻转一维数组会报错:

A = np.array([1, 2, 3,4, 5, 6])
B = np.fliplr(A) # ValueError: Input must be >= 2-d.

示例 2 ,对于二维数组,相当于镜像翻转每一行:

A = np.array([[1, 2, 3],[4, 5, 6]])B = np.fliplr(A)
print(B)
# 输出:
# [[3 2 1]
#  [6 5 4]]

示例 3 ,对高维数组(如三维),仅在第二个轴(列方向)翻转,其他维度保持不变:

C = np.arange(12).reshape(2, 3, 2)  # 形状 (2,3,2)
D = np.fliplr(C)print("原数组 C:\n", C)
print("翻转后 D:\n", D)
# 输出:
# C: [[[ 0  1], [ 2  3], [ 4  5]],
#     [[ 6  7], [ 8  9], [10 11]]]
# D: [[[ 4  5], [ 2  3], [ 0  1]],
#     [[10 11], [ 8  9], [ 6  7]]]

1.3 flipud

numpy.flipud():沿垂直方向(行方向,即 axis=0)上下翻转数组的元素(返回原数组的视图)。

函数定义:

def flipud(m)

参数说明:

  • m:输入数组,必须至少是一维的。

等价操作:

  • m[::-1, ...]:通过切片语法直接反转列顺序。
  • np.flip(m, axis=0):使用更通用的 flip 函数指定轴。

示例 1 ,一维数组翻转:

arr_1d = np.array([1, 2, 3])
reversed_arr = np.flipud(arr_1d)
print(reversed_arr)  # 输出:[3 2 1]

示例 2 ,二维数组翻转:

import numpy as npA = np.array([[1, 2, 3],[4, 5, 6]])B = np.flipud(A)
print(B)
# 输出:
# [[4 5 6]
#  [1 2 3]]

示例 3 ,三维数组翻转:

C = np.arange(12).reshape(3, 2, 2)  # 形状 (3,2,2)
D = np.flipud(C)print("原数组 C:\n", C)
print("翻转后 D:\n", D)
# 输出:
# C: [[[0  1], [2  3]],
#     [[4  5], [6  7]],
#     [[8  9], [10 11]]]
# D: [[[8  9], [10 11]],
#     [[4  5], [6  7]],
#     [[0  1], [2  3]]]

2. 滚动

2.1 roll

numpy.roll():沿指定轴循环滚动数组元素(返回新数组)。

函数定义:

numpy.roll(a, shift, axis=None)

参数说明:

  • a:输入数组。
  • shift:移动的步数。正数表示向轴的正方向(如右/下)移动,负数则反向。若为元组,需与 axis 参数一一对应。
  • axis:指定沿哪个轴滚动。默认为 None,此时数组被展平后滚动,再恢复原形状。

注意事项:

  • 元素在滚动时不会丢失,末尾元素从开头重新出现,实现“循环移位”。
  • 可同时沿多个轴滚动,每个轴独立操作。
  • 返回新数组,​不影响原数组。

示例 1 ,一维数组滚动:

x = np.arange(10)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(np.roll(x, 2))   # 输出:[8 9 0 1 2 3 4 5 6 7](右移2步)
print(np.roll(x, -2))  # 输出:[2 3 4 5 6 7 8 9 0 1](左移2步)

示例 2 ,二维数组滚动:

x2 = np.reshape(x, (2, 5))  # [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]
print(np.roll(x2, 1, axis=0))
# 输出:
# [[5 6 7 8 9]
#  [0 1 2 3 4]]

示例 3 ,三维数组滚动:

print(np.roll(x2, 1, axis=1))
# 输出:
# [[4 0 1 2 3]
#  [9 5 6 7 8]]

示例 4 ,多轴同时滚动:

print(np.roll(x2, (1, -1), axis=(0, 1)))
# 输出:
# [[9 5 6 7 8]
#  [4 0 1 2 3]]

2.2 rot90

numpy.rot90():沿指定轴循环滚动数组元素(返回新数组)。

函数定义:

numpy.roll(a, shift, axis=None)

参数说明:

  • a:输入数组。
  • shift:移动的步数。正数表示向轴的正方向(如右/下)移动,负数则反向。若为元组,需与 axis 参数一一对应。
  • axis:指定沿哪个轴滚动。默认为 None,此时数组被展平后滚动,再恢复原形状。

注意事项:

  • 元素在滚动时不会丢失,末尾元素从开头重新出现,实现“循环移位”。
  • 可同时沿多个轴滚动,每个轴独立操作。
  • 返回新数组,​不影响原数组。

示例 1 ,一维数组滚动:

x = np.arange(10)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(np.roll(x, 2))   # 输出:[8 9 0 1 2 3 4 5 6 7](右移2步)
print(np.roll(x, -2))  # 输出:[2 3 4 5 6 7 8 9 0 1](左移2步)

示例 2 ,二维数组滚动:

x2 = np.reshape(x, (2, 5))  # [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]
print(np.roll(x2, 1, axis=0))
# 输出:
# [[5 6 7 8 9]
#  [0 1 2 3 4]]

示例 3 ,三维数组滚动:

print(np.roll(x2, 1, axis=1))
# 输出:
# [[4 0 1 2 3]
#  [9 5 6 7 8]]

示例 4 ,多轴同时滚动:

print(np.roll(x2, (1, -1), axis=(0, 1)))
# 输出:
# [[9 5 6 7 8]
#  [4 0 1 2 3]]

http://www.hkcw.cn/article/dMPUtCmyYq.shtml

相关文章

彻底卸载安装的虚拟机VMware Workstation软件

文章目录 前言一、结束“任务管理器”中的相关任务二、停止“服务”中的相关服务三、卸载vmware软件四、删除vmware相关文件五、删除vmware相关注册表 前言 VMware Workstation 是 VMware 推出的桌面虚拟计算机软件,支持在单台物理机上运行多个操作系统。它提供强大…

Python 进阶【三】:Excel操作

1. 概述与库介绍 1.1 Excel自动化的重要性 在数据处理领域,Excel是最常用的工具之一。手动操作Excel对于小规模数据和简单任务尚可,但当面对: 大规模数据集重复性操作复杂计算和分析 时,手动操作效率低下且容易出错。Python提供…

Oracle RMAN自动恢复测试脚本

说明 此恢复测试脚本,基于rman备份脚本文章使用的fullbak.sh做的备份。 数据库将被恢复到RESTORE_LO参数设置的位置。 在恢复完成后,执行一个测试sql,确认数据库恢复完成,数据库备份是好的。恢复测试数据库的参数,比如SGA大小都…

亚马逊桌布运营中的利润核算与优化:从成本管控到决策升级

在亚马逊电商市场,卖家运营面临利润核算与决策难题。​ 一、卖家运营核心痛点 (一)利润核算复杂性 亚马逊费用体系复杂:平台销售佣金因类目而异,FBA 费用包含仓储、配送等项目,且随淡旺季、仓储时长动态…

C# Costura.Fody 排除多个指定dll

按照网上的说在 FodyWeavers.xml 里修改 然后需要注意的是 指定多个排除项 不是加 | 是换行 一个换行 就排除一项 我测试的 <?xml version"1.0" encoding"utf-8"?> <Weavers xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&quo…

设计模式-发布订阅

文章目录 发布订阅概念发布订阅 vs 监听者例子代码 发布订阅概念 发布/订阅者模式最大的特点就是实现了松耦合&#xff0c;也就是说你可以让发布者发布消息、订阅者接受消息&#xff0c;而不是寻找一种方式把两个分离 的系统连接在一起。当然这种松耦合也是发布/订阅者模式最大…

算法第32天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

509. 斐波那契数 题目 思路与解法 class Solution:def fib(self, n: int) -> int:fib [1] * nif n 0:return 0if n 1 or n 2 :return 1for i in range(2, n):fib[i] fib[i-1] fib[i-2]return fib[n-1]70. 爬楼梯 题目 思路与解法 class Solution:def climbStairs(…

涂鸦智能的TuyaOpen框架入门指南:智能插座实战

目录 引言 TuyaOpen框架简介 程序下载和编译 安装依赖 克隆仓库 设置与编译 step1. 设置环境变量 step2. 选择待编译项目 step3. 编译 step4. menuconfig 配置 在Ubuntu上测试示例程序Switch Demo 创建产品并获取产品的 PID 确认 TuyaOpen 授权码 运行程序 程序…

快速上手shell条件测试

一、命令执行结果判定 && 命令执行后如果没有任何报错时会执行符号后面的动作 || 在命令执行后如果命令有报错会执行符号后的动作 二、条件判断方法 条件测试语法说明示例test 测试表达式test命令和 测试表达式 之间至少有一个空格[ 测试表达式 ]该方法和test命令的…

每日刷题c++

快速幂 #include <iostream> using namespace std; #define int long long int power(int a, int b, int p) {int ans 1;while (b){if (b % 2){ans * a;ans % p; // 随时取模}a * a;a % p; // 随时取模b / 2;}return ans; } signed main() {int a, b, p;cin >> a …

什么是node.js、npm、vue

一、Node.js 是什么&#xff1f; &#x1f63a; 定义&#xff1a; Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境&#xff0c;让你可以在浏览器之外运行 JavaScript 代码&#xff0c;主要用于服务端开发。 &#x1f63a;从计算机底层说&#xff1a;什么是“运…

华为OD机试真题——求最多可以派出多少支队伍(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

webrtc初了解

1. webrtc的简介 一、WebRTC 是什么&#xff1f; Web Real-Time Communication&#xff08;网页实时通信&#xff09;&#xff0c;是浏览器原生支持的实时音视频通信技术&#xff0c;无需安装插件或客户端&#xff0c;可直接在浏览器之间实现点对点&#xff08;P2P&#xff09…

【Deepseek 学网络互联】跨节点通信global 和节点内通信CLAN保序

Clan模式下的源端保序与Global类似&#xff0c;目的端保序则退化成通道保序&#xff0c;此时仅支持网络单路径保序。”这里的通道保序怎么理解&#xff1f; 用户可能正在阅读某种硬件架构文档&#xff08;比如NVIDIA的NVLink或InfiniBand规范&#xff09;&#xff0c;因为"…

​Windows 11 安装 Miniconda 与 Jupyter 全流程指南​

​一、Miniconda 安装与配置​ 1. 下载安装程序 ​访问官网​&#xff1a;打开 Miniconda 官网&#xff0c;下载 ​Python 3.x 版本的 Windows 64 位安装包​。​安装路径选择​&#xff1a; 推荐路径&#xff1a;D:\Miniconda3&#xff08;避免使用中文路径和空格&#xff0…

飞牛NAS+Docker技术搭建个人博客站:公网远程部署实战指南

文章目录 前言1. Docker下载源设置2. Docker下载WordPress3. Docker部署Mysql数据库4. WordPress 参数设置5. 飞牛云安装Cpolar工具6. 固定Cpolar公网地址7. 修改WordPress配置文件8. 公网域名访问WordPress总结 前言 在数字化浪潮中&#xff0c;传统网站搭建方式正面临前所未…

批目标灵活模拟!成都鼎讯雷达模拟器,打造沉浸式雷达对抗训练场景

在现代战争的电磁频谱博弈中&#xff0c;能否构建高度逼真的雷达干扰与目标环境&#xff0c;直接决定着雷达装备性能的上限与作战人员的实战能力。成都鼎讯凭借在数字射频存储&#xff08;DRFM&#xff09;、数字干扰调制&#xff08;DJS&#xff09;等前沿技术的深厚积累&…

GelSight Mini触觉传感器:7μm精度+3D 映射,赋能具身智能精密操作

GelSight Mini 高分辨率视触觉传感器采用先进的光学成像与触觉感知技术&#xff0c;赋予机器人接近人类的触觉能力。该设备可捕捉物体表面微观细节&#xff0c;并生成高精度的2D/3D数字映射&#xff0c;帮助机器人识别形状、纹理及接触力&#xff0c;从而执行更复杂、精准的操作…

【机器学习基础】机器学习入门核心算法:随机森林(Random Forest)

机器学习入门核心算法&#xff1a;随机森林&#xff08;Random Forest&#xff09; 1. 算法逻辑2. 算法原理与数学推导2.1 核心组件2.2 数学推导2.3 OOB&#xff08;Out-of-Bag&#xff09;误差 3. 模型评估评估指标特征重要性可视化 4. 应用案例4.1 医疗诊断4.2 金融风控4.3 遥…

Nacos 配置管理案例:nacos-spring-cloud-config-example详解

一、结构说明&#xff1a;基于Spring Cloud Alibaba的微服务示例 nacos-spring-cloud-config-example : 服务提供者 二、技术栈&#xff1a;Spring BootSpring CloudSpring Cloud Alibaba Nacos Actuator&#xff08;可选&#xff1a;监控&#xff09; 三、使用环境 安装…