matrixzq:基于ℤq的纯python矩阵库

news2025/2/26 14:49:31

1. 引言

当希望使用纯 Python 代码对整数 q 模矩阵进行操作,以演示使用学习误差 (Learning-With-Errors,LWE) 的基于格的加密方案的一些原理时,找到了 Thom Ives 编写的优秀代码“纯 Python 中无需 Numpy 或 Scipy 的 BASIC 线性代数工具”:

  • https://github.com/ThomIves/BasicLinearAlgebraToolsPurePy(Python)
    在这里插入图片描述

受该代码启发,编写了:

  • https://github.com/davidi67/matrixzq(Python)
    • 相关说明文档见:https://di-mgt.com.au/matrixzqdoc/html/index.html

matrixzq库提供了基本的 Python 函数而不是更复杂的类,以便可以轻松提取和使用底层列表的列表。

matrixzq python库中:

  • 包含对矩阵进行基于 Z q ( Z / q Z ) ℤ_q (ℤ/qℤ) Zq(Z/qZ) 运算的函数
  • 不使用 Numpy 或 Scipy,而是使用纯 Python。

其中 q q q 是大于 1 的正整数。所有矩阵元素都应为 [ 0 , q − 1 ] [0, q-1] [0,q1] 范围内的非负整数。所有计算均以 q q q 为模进行。

  • 对于大多数矩阵算术运算(加、乘)来说,模数 q q q 不必是素数,
  • 但 对于涉及除法的运算(求逆、求解), 模数 q q q必须是素数。

相关示例为:

import matrixzq as mzq

mzq.set_modulus(11)
print(f"q={mzq.get_modulus()}")  # 11

# Invert a matrix
M = mzq.new_matrix([[2,3,7],[4,5,10],[9,0,7]])
print("M ="); mzq.print_matrix(M)
IM = mzq.invert(M)
print("IM=invert(M)=");mzq.print_matrix(IM)
# Multiply inverse by itself: should get identity
IMM = mzq.multiply(IM, M)
print(f"IM*M=\n{mzq.sprint_matrix(IMM)}")
I = mzq.identity_matrix(len(M))
print("IM*M==I:", mzq.equality(I, IMM))
assert(mzq.equality(I, IMM))

# Solve the matrix equation Ax = b
A = mzq.new_matrix([[1,1,1,1],[2,4,6,7],[4,5,3,5],[8,9,7,2]])
b = mzq.new_vector([6,0,4,5])
print("A=");mzq.print_matrix(A)
print("b=",end='');mzq.print_vector(b)
x = mzq.solve(A, b)
print("Solve Ax=b => x =", mzq.sprint_vector(x))
# Check result
ax = mzq.multiply(A, x)
print("Check Ax =", mzq.sprint_vector(ax))
print("Ax==b:", mzq.equality(ax, b))
assert(mzq.equality(ax, b))

# Show the transpose of a matrix
print("Transpose A^T=");mzq.print_matrix(mzq.transpose(A))

对应执行输出为:

q=11
M =
[2, 3, 7]
[4, 5, 10]
[9, 0, 7]
IM=invert(M)=
[5, 8, 4]
[1, 4, 9]
[3, 7, 6]
IM*M=
[1, 0, 0]
[0, 1, 0]
[0, 0, 1]
IM*M==I: True
A=
[1, 1, 1, 1]
[2, 4, 6, 7]
[4, 5, 3, 5]
[8, 9, 7, 2]
b=[6, 0, 4, 5]
Solve Ax=b => x = [10, 2, 8, 8]
Check Ax = [6, 0, 4, 5]
Ax==b: True
Transpose A^T=
[1, 2, 4, 8]
[1, 4, 5, 9]
[1, 6, 3, 7]
[1, 7, 5, 2]

参考资料

[1] Python matrix tools over ℤq

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

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

相关文章

深度学习笔记——模型压缩和优化技术(蒸馏、剪枝、量化)

本文详细介绍模型训练完成后的压缩和优化技术:蒸馏、剪枝、量化。 文章目录 1. 知识蒸馏 (Knowledge Distillation)基本概念工作流程关键技术类型应用场景优势与挑战优势挑战 总结 2. 权重剪枝 (Model Pruning)基本原理二分类1. 非结构化剪枝(Unstructur…

【单片机】ESP32-S3+多TMC2209控制步进电机系列1 UART通信及无传感回零 硬件部分

目录 1. 硬件选型1.1 esp32硬件型号1.2 TMC2209 硬件型号 2 原理接线图2.1 esp32接线2.2 TMC2209接线2.2.1 单向通讯 不配置地址2.2.2 单向通讯 配置地址2.2.3 双向通讯 单UART 【本文采用】2.2.4 双向通讯 多UART 3. 成品效果 1. 硬件选型 1.1 esp32硬件型号 采用的是微雪ES…

【论文复刻】雾霾污染及ZF治理与经济高质量发展(2004-2020年)

一、数据来源: PM2.5数据根据美国哥伦比亚大学社会经济数据与应用中心提供的全球PM2.5的年均浓度数据整理计算而得,人均实际GDP是以2000年为基期进行平减处理获得的实际GDP,控制变量来自《中国城市统计年鉴》、国家统计局,内含原…

行列式计算方法

行列式(Determinant)是线性代数中一个重要的概念,用来描述方阵的一些性质,尤其是与矩阵的可逆性、特征值等有关。下面是几种常见的计算行列式的方法: 1. 2x2矩阵的行列式 对于一个2x2矩阵: 行列式计算公式…

Elastic Cloud Serverless:深入探讨大规模自动扩展和性能压力测试

作者:来自 Elastic David Brimley, Jason Bryan, Gareth Ellis 及 Stewart Miles 深入了解 Elasticsearch Cloud Serverless 如何动态扩展以处理海量数据和复杂查询。我们探索其在实际条件下的性能,深入了解其可靠性、效率和可扩展性。 简介 Elastic Cl…

基于SpringBoot的旅游管理系统设计与实现

标题: 《基于SpringBoot的旅游管理系统设计与实现》 摘要: 本研究的主要目标是设计与实现基于Spring Boot的现代化旅游管理系统,旨在有效解决传统系统存在的多项问题,如用户体验不佳、功能不完善以及安全性方面的隐患。随着互联网…

LeetCode 热题100(十五)【动态规划】(3)

15.7最长递增子序列(中等) 题目描述:leetcode链接 300. 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元…

精华帖分享|书中自有黄金屋系列2——格雷厄姆估值因子

本文来源于量化小论坛股票量化板块精华帖,作者为Benlyn,发布于2024年2月2日。 以下为精华帖正文: 01 前言 巴菲特一直强调“以合理的估值买入好公司”的投资理念,因此今天想给大家介绍一下与估值相关的内容。买股票买好公司固然…

干部谈话考察系统如何实现灵活定制和精准考评?

在当今社会,干部选拔与任用已成为各类组织内部管理的关键环节。为了确保选拔出的干部具备高素质和卓越能力,干部谈话考察系统应运而生。这一系统以其灵活定制和精准考评的特点,为组织提供了科学、高效的干部考察手段。 干部谈话考察系统通过集…

云渲染特效广告一秒费用预估是多少?

在计算云渲染特效广告每秒钟的费用时,我们需要综合考虑多个关键因素,包括特效的复杂性、所需的渲染计算能力以及对渲染质量的具体要求。通常情况下,影视特效级别的广告因其场景极其复杂,每帧渲染所需时间较长,从而导致…

利用docker-compose来搭建flink集群

1.前期准备 (1)把docker,docker-compose,kafka集群安装配置好 参考文章: 利用docker搭建kafka集群并且进行相应的实践-CSDN博客 这篇文章里面有另外两篇文章的链接,点进去就能够看到 (2&…

2024年认证杯SPSSPRO杯数学建模C题(第一阶段)云中的海盐解题全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 C题 云中的海盐 原题再现: 巴黎气候协定提出的目标是:在2100年前,把全球平均气温相对于工业革命以前的气温升幅控制在不超过2摄氏度的水平,并为1.5摄氏度而努力。但事实上,许多之前的…

初识树(二叉树,堆,并查集)

本篇博客将涉及到一些专业名词:结点、深度、根、二叉树、满二叉树、完全二叉树、堆、并查集等。 概要 树型结构是一类重要的非线性数据结构。其中以树和二叉树最…

2024年中国光伏产业研究报告(附产业链图谱)

光伏产业是指利用太阳能电池将太阳光转换为电能的产业,它涉及到太阳能电池、组件、系统及相关配套产品的研发、生产、销售和服务。光伏产业是新能源领域的重要组成部分,已成为我国少数具有国际竞争优势的战略性新兴产业之一。国家多个部门联合印发了《智…

Linux:Ext系列文件系统

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、理解硬件磁盘1.1 磁盘物理结构1.2 磁盘的存储结构1.3 磁盘的逻辑结构 二、文件系统2.1 引⼊"分区”概念和“块"概念2.2 inode(重要)2.3 文件与in…

Alogrithm:巴斯卡三角形

巴斯卡三角形(Pascals Triangle)是一个由数字排列成的三角形,每一行的数字是由前一行的两个相邻数字相加得到的。巴斯卡三角形的每一行对应着二项式展开式的系数。具体如下图所示: 巴斯卡三角形的性质 第 0 行只有一个数字 1。第 …

项目资源管理

点击系统侧边栏里的项目图标 ,会在系统资源列表里显示当前任擎服务器上所有项目的各种资源列表,包括数据模型、后台服务、前端文件、数据表单和微信小程序等。 项目资源管理器用来对开发者自己开发的软件项目进行管理,这里的“项目”是指仅…

WEB开发: Node.js路由之由浅入深(一) - 全栈工程师入门

作为一个使用Node.js多年的开发者,我已经习惯于用Node.js写一些web应用来为工作服务,因为实现快速、部署简单、自定义强。今天我们一起来学习一个全栈工程师必备技能:web路由。(观看此文的前提是默认你已经装好nonde.js了&#xf…

大模型分类3—按功能特性

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl根据功能特性,大模型可分为生成式、分析式和交互式大模型。 1. 大模型分类概述 1.1 生成式大模型 生成式大模型的核心能力在于其创造性,能够独立生成新的数据样本,如文本、图像和音频等。这类…

VUE拖拽对象到另一个区域

最近有个需求是需要在web端定制手机的界面UI(具体实现比较复杂,此处不做阐述,此文章只说明拖拽效果实现),为了方便用户操作,就想实现这种效果:从右侧的图标列表中拖拽图标到左侧模拟的手机界面上…