Python群论:置换和置换群

文章目录

    • 简介
    • 置换的复合
    • 置换群

简介

所谓置换,简单地说就是交换两个元素的位置。例如,给定一组元素 a 0 , a 1 , a 2 a_0, a_1, a_2 a0,a1,a2,那么通过置换之后,这组元素可以变成 a 0 , a 2 , a 1 a_0, a_2, a_1 a0,a2,a1,即 a 1 a_1 a1 a 2 a_2 a2的位置发生了变化,此即置换。

置换也可以有另一种理解方式,即集合内元素的一一映射,那么这个置换过程可表述为

a 0 → a 0 a 1 → a 2 a 2 → a 1 a_0\to a_0\\ a_1\to a_2\\ a_2\to a_1\\ a0a0a1a2a2a1

从下表的角度出发,将 [ 0 , 1 , 2 ] [0,1,2] [0,1,2]变成了 [ 0 , 2 , 1 ] [0,2,1] [0,2,1],从而 [ 0 , 2 , 1 ] [0,2,1] [0,2,1]即可作为一种表述置换的方法。sympy中的置换类Permutation,采用的就是这种方法,示例如下

from sympy.combinatorics import Permutationp = Permutation([0, 2, 1])
[i^p for i in range(p.size)]
# [0, 2, 1]

Permutation重载了运算符^,表示作用在某个元素上,上面的代码的含义就是,将置换p分别作用到0,1,2上,得到结果0,2,1。

置换还有另外一种创建方式,就是列举出不同元素的一一映射,以 p p p为例,其并未更改0的位置,而只是对 1 , 2 1,2 1,2进行了置换操作,从而其创建方式如下

p1 = Permutation(1,2)
p1 == p # True

置换的复合

置换作为一种操作,显然可以重复作用在某个元素上,如果把关注点放在置换这种运算上,那么相当于多次置换可以复合成一个新的置换。Permutation重载了运算符*即可实现此功能

q = Permutation([2, 1, 0])
[i^p^q for i in range(3)]
# [2, 0, 1]
p*q
# Permutation(0, 2, 1),注意0,2,1没有方括号

如上述代码所示,p*q复合的结果是 0 , 2 , 1 0, 2, 1 0,2,1,其置换逻辑是 0 → 2 , 2 → 1 0\to2, 2\to1 02,21,剩下的 1 → 0 1\to0 10则省略掉了,这与上面的计算结果是相符的。

一般来说,置换操作是不可交换的,即p*qq*p并不相等

q*p
# Permutation(0, 1, 2)

置换操作在创建时,也可以将这种符合方式考虑进去

Permutation(1,2)(0,2)
# Permutation(0, 2, 1)

置换群

群是一种定义了二元运算的简单的代数系统,当这个二元运算是置换时,就是置换群。考虑到群中二元运算的封闭性,所以当对所有元素进行这种置换之后,群中的元素只有位置发生了变化,而不会出现增减。故而也可将这种置换理解为集合 Ω \Omega Ω到其自身的映射。

在Sympy中,提供了PermutationGroup类,用于构造一个置换群。下面以p和q作为生成元,来构造一个置换群,可得到群的阶数为6。

from sympy.combinatorics import PermutationGroup
G = PermutationGroup(p, q)
G.order()
# 6

置换群的一个很常见的应用,就是描述几何图形的对称性,在sympy的组合学工具中,也提供了多面体类。多面体类可为置换群添加顶点,然后通过rotate来进行置换。

from sympy.combinatorics import Polyhedron
P = Polyhedron(list('ABC'), pgroup=G)
P.corners
# (A, B, C)
P.rotate(0)
# P.corners
(A, C, B)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/602762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot配置多数据源

SpringBoot配置多数据源 前置条件数据库配置pom.xmlapplication.yml代码Two.javaTwoMapper.javaTwoMapper.xmlTwoService.javaTwoServiceImpl.javaTwoController.java效果前置条件 项目已经集成了mysql单数据源 数据库 数据库demo CREATE TABLE `test` (`id` int(11) NOT NUL…

LLM漫谈(二)| QAnything支持任意格式文件或数据库的本地知识库问答系统

一、QAnything介绍 QAnything (Question and Answer based on Anything) 是致力于支持任意格式文件或数据库的本地知识库问答系统,可断网安装使用。 您的任何格式的本地文件都可以往里扔,即可获得准确、快速、靠谱的问答体验。 目前已支持格式: PDF&…

基于商品列表的拖拽排序后端实现

目录 一:实现思路 二:实现步骤 二:实现代码 三:注意点 一:实现思路 后台实现拖拽排序通常需要与前端进行配合,对商品的列表拖拽排序,前端需要告诉后端拖拽的元素和拖动的位置。 这里我们假…

MySQL第四战:视图以及常见面试题(上)

目录 目录: 一.视图 1.介绍什么是视图 2.视图的语法 语法讲解 实例操作 二.MySQL面试题 1.SQL脚本 2.面试题实战 三.思维导图 目录: 随着数字化时代的飞速发展,数据库技术,特别是MySQL,已经成为IT领域中不可…

Java-网络爬虫(二)

文章目录 前言一、WebMagic二、使用步骤1. 搭建 Maven 项目2. 引入依赖 三、入门案例四、核心对象&组件1. 核心对象SipderRequestSitePageResultItemsHtml(Selectable) 2. 四大组件DownloaderPageProcessorSchedulerPipeline 上篇:Java-网…

使用Enterprise Architect绘制架构图

如何使用Enterprise Architect绘制架构图 之前没有使用过Enterprise Architect软件绘制,目前由于工作需求,需要使用Enterprise Architect绘制一些架构图,现在只使用Enterprise Architect绘制过简单的Flow Chart,想请教一下大神们…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑系统调峰需求与光热电站收益平衡的储热容量优化配置》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主的专栏栏目《论文与完整程序》 这个标题表明研究的主题涉及到光热电站系统中的储热容量优化配置,而优化的目标是在系统中实现调峰需求并平衡光热电站的收益。让我们逐步解读这…

学习使用layPage, 多功能JS分页组件/插件的方法

学习使用layPage, 多功能JS分页组件/插件的方法 效果图分页代码 效果图 点击查看链接 分页代码 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>Layui</title><meta name"renderer" content"we…

数字系统课程设计与VHDL报告

获“优”&#xff0c;含实验结果视频、代码、报告&#xff0c;99.99%原创&#xff0c;配置环境太复杂不包跑通&#xff0c;要的私信。

在 Docker 中配置 MySQL 数据库并初始化 Project 项目

1. 文件准备 1.1. 添加 SQL 文件头部内容 每个 SQL 文件的头部需要添加以下内容&#xff1a; DROP DATABASE IF EXISTS xx_..; CREATE DATABASE xx_..; USE xx_..;1.2. 修改 AUTO_INCREMENT 在每个 SQL 文件中&#xff0c;将 AUTO_INCREMENT 修改为 1。 1.3. 插入机型 在 SQL…

软件测试|深入学习 Docker Logs

简介 Docker 是一种流行的容器化技术&#xff0c;它能够帮助用户将应用程序及其依赖项打包成一个可移植的容器。Docker logs 是 Docker 提供的用于管理容器日志的命令&#xff0c;本文将深入学习 Docker logs 的使用和管理&#xff0c;帮助用户更好地监测和解决容器问题。 Do…

QT c++和qml交互实例

文章目录 一、demo效果图二、c和qml交互的基本方式1、qml访问C类对象 三、关键代码1、工程结构图2、c代码MainWindow.cppMainQuickView.cppStudentInfoView.cppStudentInfoModel.cpp 3、qml代码main.qmlMainQuickTopRect.qmlMainQuickMiddleRect.qmlMainQuickMiddleTableRect.q…

蓝桥杯基础知识2 全排列 next_permutation(), prev_permutation()

蓝桥杯基础知识2 全排列 next_permutation()&#xff0c; prev_permutation() #include<bits/stdc.h> using namespace std;int a[10];int main(){for(int i 1; i < 4; i)a[i] i; //4*3*2*1 24bool tag true;while(tag){for(int i1; i < 4; i)cout << a[…

CoTracker 环境配置与ORB 特征点提取结合实现视频特征点追踪

CoTracker 环境配置&与ORB 特征点提取结合实现视频特征点追踪 文章目录 CoTracker 环境配置&与ORB 特征点提取结合实现视频特征点追踪Step1&#xff1a;配置 CoTracker 环境Step2&#xff1a;运行官方的例程Step3&#xff1a;结合 ORB 特征点提取结果展示&#xff1a; …

蓝桥杯练习题(一)

&#x1f4d1;前言 本文主要是【算法】——蓝桥杯练习题&#xff08;一&#xff09;的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …

时间序列预测 — VMD-LSTM实现单变量多步光伏预测(Tensorflow):单变量转为多变量预测多变量

目录 1 数据处理 1.1 导入库文件 1.2 导入数据集 ​1.3 缺失值分析 2 VMD经验模态分解 2.1 VMD分解实验 2.2 VMD-LSTM预测思路 3 构造训练数据 4 LSTM模型训练 5 LSTM模型预测 5.1 分量预测 5.2 可视化 时间序列预测专栏链接&#xff1a;https://blog.csdn.net/qq_…

jsES6+新语法

目录 模板字符串标签模板字符串 函数增强默认值与解构剩余参数rest和arguments 箭头函数 展开语法SymbolSetSet方法weakSetweakSet常用方法 MapMap常用方法weakMapweakMap常用方法 PromiseProxy/Reflect迭代器与生成器ES6新增方法includes**Object.valuesObject.entriespadStar…

JMS消息发送

目录 概述1.搭建 JMS 环境2.使用JmsTemplate 发送消息3.接收JMS 消息 概述 JMS是一个Java标准&#xff0c;定义了使用消息代理(message broker)的通用API,在2001年提出。长期以来&#xff0c;JMS一直是Java 中实现异步消息的首选方案。在JMS 出现之前每个消息代理都有其私有的…

基于Python新闻推荐系统 大数据毕业设计 爬虫+可视化+推荐算法 vue框架+Django框架(附源码)✅

毕业设计&#xff1a;2023-2024年计算机专业毕业设计选题汇总&#xff08;建议收藏&#xff09; 毕业设计&#xff1a;2023-2024年最新最全计算机专业毕设选题推荐汇总 &#x1f345;感兴趣的可以先收藏起来&#xff0c;点赞、关注不迷路&#xff0c;大家在毕设选题&#xff…

mysql原理--InnoDB的Buffer Pool

1.缓存的重要性 对于使用 InnoDB 作为存储引擎的表来说&#xff0c;不管是用于存储用户数据的索引&#xff08;包括聚簇索引和二级索引&#xff09;&#xff0c;还是各种系统数据&#xff0c;都是以 页 的形式存放在 表空间 中的&#xff0c;而所谓的 表空间 只不过是 InnoDB 对…