纯 Python 计算三角函数的方式?

3
我有一个小的Python脚本,想使用pyinstaller将其转换为单个可执行文件。该脚本主要接受输入文件,对其进行处理并编写输出文件。但是在脚本中需要计算正切函数,在使用numpy.tan()或math.tan()进行计算时,最终的可执行文件变得非常庞大,因为pyinstaller将整个numpy或math模块捆绑到了可执行文件中。因此,我的问题是,是否有一种纯Python方法来计算三角函数?我认为应该有一种仅通过数学定义正弦、余弦和正切的方式来实现,但我找不到这样的方法。

3
没错的话,math模块已经是Python的一部分了。 - Flavian Hautbois
我不明白为什么你会在没有math模块的情况下打包Python。你确定使用math.tan对可执行文件大小有影响吗?(我非常怀疑。) - Mark Dickinson
1
你尝试过在源文件顶部使用 from math import tan 而不是仅仅使用 import math 吗?这样你就可以使用 tan() 而不是 math.tan() - RobH
1
所以代码非常小,大约50行,可执行文件为5.9MB,对于一个非常小的代码来说似乎过于庞大。如果我使用numpy.math,则文件大小约为350MB!最初我认为pyinstaller会将Python脚本编译为C或其他东西,这样我期望可执行文件应该非常小。但是如果它实际上将Python的一部分捆绑在一起,那么5MB并不算太坏。 - Jonny
你也可以在 decimal 模块中找到 sin 和 cos 的代码示例,链接为:https://docs.python.org/3/library/decimal.html#recipes。 - Copperfield
显示剩余9条评论
2个回答

3
这里是泰勒级数展开的计算器,它是一种常用的数值方法,可以达到任意精度。

顺便提一下,由于三角函数具有循环性质,误差与输入成比例(或者某个次方),所以如果您不期望大部分情况下都表现良好,应该注意它们。


非常感谢,这正是我所需要的。不过,可执行文件的大小保持不变,因此我认为pyinstaller会将许多不必要的东西与可执行文件捆绑在一起。 - Jonny

3

使用复数可以表示三角函数:欧拉公式

然而,这需要您执行复杂的数学运算,并且您必须导入cmath。如果您想采用这种方法,则需要自己实现复杂数学。

否则,可以通过评估泰勒级数来获得简单的近似值。同样,由于import math不是一个选项,这需要您自己实现一些基础内容,如幂和阶乘。


1
不需要导入 cmath 模块:只需执行 e**(theta*1j) - Mark Dickinson
谢谢Sebastian。这正是我需要的,但Chris的回答比你早1分钟(-: 然而,如果我以任何方式使用泰勒级数,可执行文件的大小都保持不变。 - Jonny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接