
如何用 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),仅供参考