新闻详情

新闻详情

首页 / 资讯中心 / 详情

如何用 Python 实现 Radix-2 FFT 完成多项式快速乘法

发布时间:2026/9/13 10:36:04来源:尧图网络
如何用 Python 实现 Radix-2 FFT 完成多项式快速乘法
如何用 Python 实现 Radix-2 FFT 完成多项式快速乘法【免费下载链接】PythonAll Algorithms implemented in Python项目地址: https://gitcode.com/GitHub_Trending/pyt/Python任务是把两个多项式相乘并且不让复杂度停留在逐项乘法的平方级。这个仓库的 maths/radix2_fft.py 提供了一套现成的实现FFT类用 radix-2 Cooley–Tukey 算法完成多项式快速乘法你只需传入两个多项式的系数序列构造对象后从product属性读取乘积。下面按准备依赖、构造乘法、核对输出的顺序走一遍。适用环境Python 3.14pyproject.toml 中requires-python 3.14且环境里能导入numpy和mpmath。准备环境与依赖项目在 pyproject.toml 中声明核心依赖numpy2.1.3maths/radix2_fft.py 顶部导入了mpmathdocstring 注明用于计算 roots of unity即单位根和numpynp.ceil、np.log2mpmath没有出现在pyproject.toml的依赖清单里全新环境需要自行安装python -m pip install mpmath numpy输入多项式的表示方式多项式用从常数项开始的系数序列表示列表或元组都可以。源码 docstring 的例子x 2x^3写作[0, 1, 0, 2]2 3x 4x^2写作(2, 3, 4, 0)。构造函数会先剥掉末尾的零系数再给两个多项式补零到同一长度c_max_length——不小于两多项式长度之和减 1 的最小 2 的幂。上面的例子里 A 剥零后长 4、B 剥零后长 34 3 − 1 6所以c_max_length为 8。docstring 声明对次数为 m 和 n 的多项式算法复杂度为O(n*logn m*logm)。执行多项式乘法在仓库根目录下执行这样maths包可以被导入from maths.radix2_fft import FFT A [0, 1, 0, 2] # x 2x^3 B [2, 3, 4, 0] # 2 3x 4x^2 x FFT(A, B) print(x.c_max_length) print(x.product) print(x)文档示例输出来自源文件 docstring 的示例不是必须逐字节一致的固定日志8 [(-0-0j), (20j), (3-0j), (8-0j), (60j), (80j)] A 0*x^0 1*x^1 0*x^2 2*x^3 B 2*x^0 3*x^1 4*x^2 A*B (-0-0j)*x^0 (20j)*x^1 (3-0j)*x^2 (8-0j)*x^3 (60j)*x^4 (80j)*x^5怎么读这个输出x.product是乘积的系数序列对应2x 3x^2 8x^3 6x^4 8x^5第 0 项是-0-0j末尾的零系数已被剥离print(x)调用__str__分三行显示 A、B、A*B系数是复数。实现里逆变换之后把实部、虚部都四舍五入到 8 位小数round(..., 8)所以整系数输入的虚部显示为 0。算法内部的两步docstring 把主体拆成两部分理解到这一步足够__dft用自底向上的迭代方式分别计算 A 和 B 的离散傅里叶变换DFT使用的复根来自mpmath.root即c_max_length阶的单位根__multiply把 A 与 B 的 DFT 逐点相乘再做逆变换还原出 A*B 的系数序列剥掉末尾零后作为product返回。因此构造函数返回时乘法已经完成不需要再调用其他方法。验证结果源文件末尾自带测试入口# Unit tests if __name__ __main__: import doctest doctest.testmod()两种验证方式# 方式一直接运行文件执行 docstring 中的 doctest python maths/radix2_fft.pydoctest 会对FFT(A, B)的product输出和print(x)的三行输出即上一节的示例做断言无 failed 即通过。# 方式二走项目的 pytest 配置 pytest maths/radix2_fft.pypyproject.toml 的[tool.pytest]中addopts包含--doctest-modules所以 pytest 会把该文件里的 doctest 一并跑起来。限制实现面向复系数多项式结果是复数序列逆变换后按 8 位小数取整系数精度超出 8 位小数时会被舍入构造时会强制把两个多项式补零到同一 2 的幂长度实际变换长度是c_max_length而不是原始长度项目 README.md 声明这些实现仅供学习效率可能低于 Python 标准库的实现Use them at your discretion工程场景请自行评估是否采用。【免费下载链接】PythonAll Algorithms implemented in Python项目地址: https://gitcode.com/GitHub_Trending/pyt/Python创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

电力系统概率潮流计算:半不变量法与Matlab实现 2026/9/13 11:12:07

电力系统概率潮流计算:半不变量法与Matlab实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
SmartMediaKit与YOLO集成:实时视频AI推理的工程化实践 2026/9/13 11:12:07

SmartMediaKit与YOLO集成:实时视频AI推理的工程化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Firecrawl+anydoc:中文办公文档智能转Markdown实战指南 2026/9/13 11:12:07

Firecrawl+anydoc:中文办公文档智能转Markdown实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Node.js安装指南:从入门到多版本管理 2026/9/13 11:12:07

Node.js安装指南:从入门到多版本管理

1. Node.js安装前的准备工作在开始安装Node.js之前,我们需要先了解几个关键概念。Node.js是一个基于Chrome V8引擎的JavaScript运行时环境,它让开发者能够在服务器端运行JavaScript代码。与浏览器中的JavaScript不同,Node.js提供了访问文件系…

阅读更多 →
贪婪算法在OFDM资源分配中的Matlab实现与调参 2026/9/13 11:12:07

贪婪算法在OFDM资源分配中的Matlab实现与调参

简介:面向OFDM系统的资源分配优化场景,这里提供一套基于贪婪算法的Matlab实现与说明文件。资源定位于无线通信方向的学生与算法研究者,适合已经掌握OFDM基础、希望借助实际代码理解贪婪算法在子载波分配和功率控制中局部最优决策策略的读者。…

阅读更多 →
无人艇编队控制:GVF方法与抗扰技术实践 2026/9/13 11:09:06

无人艇编队控制:GVF方法与抗扰技术实践

1. 无人艇编队控制的核心挑战与解决方案在海洋监测、水域巡逻等实际应用中,多无人艇(USV)协同作业往往面临三大技术难题:首先是欠驱动特性导致的控制自由度不足问题,常规USV通常只有推进器和方向舵两个控制输入,却需要同时控制位置…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞