- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
scipy.special.binom 和 scipy.misc.comb 有什么区别?
在 ipython 中,我可以看到它们返回不同的类型并且具有不同的准确性。
scipy.special.binom(4,3)
4.0
scipy.misc.comb(4,3)
array(4.000000000000001)
binom -- binom: dd->d -- orthogonal_eval.pxd
gammaln -- lgam: d->d, clngamma_wrap: D->D -- cephes.h, specfun_wrappers.h
最佳答案
每当您遇到不知道某些代码在做什么并且在某个解释器中简单地导入父模块并检查代码的执行、文档字符串等并不容易的情况时,那么您有一些选项。
让我来描述两个选项,这两个选项这次结果不是很有帮助,但它们是将来开始解决此类问题的好方法(以便您可以包含这些尝试的输出,以向人们证明您尝试过在这里发布之前的一些东西,并且看起来很喜欢知道这些东西是什么):
您可以使用 dis
将 Python 代码反汇编为已执行的操作码的模块,如下所示:
python -c "import dis; from scipy import misc; print dis.dis('misc.comb(4,3)')"
python -c "import dis; from scipy import special; print dis.dis('special.binom(4,3)')"
strace
启动一些东西并检查所进行的系统调用。在这种情况下,您可以查看输出
strace -qc python -c "from scipy import special; special.binom(4,3)"
strace -qc python -c "from scipy import misc; special.comb(4,3)"
-qc
选项使输出不那么冗长,并汇总了在不同系统调用中花费的时间,这在第一次启动时可以更容易阅读。如果您省略
-qc
部分,您将获得大屏幕转储所有的系统调用……你想在 Emacs 中打开并搜索的东西,或者通过管道连接到系统工具进行搜索)。
strace
没有太大帮助,并且有很多与模块导入相关的嘈杂系统调用。
cProfile
:
python -c "import cProfile; cProfile.run('from scipy import special; special.binom(4,3)')"
scipy.special.orthogonal_eval
的系统调用。谷歌搜索这个模块发现我们正在谈论一个共享库,构建为文件
orthogonal_eval.so
我发现了这个
nice page with the source code .
binom
的完整函数定义在那里,其中包括对小值公式中涉及的阶乘的标准计算,以及与其他特殊函数的一些近似值(我看到一些名为
cephes.h
的文件中定义的对“Gamma”、“beta”和“lbeta”的调用) )。
.h
文件和谷歌更多一些,可能会在所有这些的底部找到一个长期存在的特殊函数的 C 库。
misc.comb
首先考虑
regular documentation这是可用的(而对我来说,它不适用于
binom
)。
exact
如果您不想要
float
,可以将其设置为 0 以外的值。被退回。在这种情况下,
long
已返回,但您可以转换为
int
如果你愿意。
orthogonal_eval
怎么样
k
相对较小,答案将给出一个整数(整数参数),然后使用舍入误差较小的东西。而
comb
只有在你说
exact=1
时才会这样做(或其他任何东西,例如
exact != 0
)。
comb
的代码正在执行,好吧,我们可以
view the source这是从 SciPy 文档页面链接的。
scipy.special
的一些辅助函数调用。但是 Python 层和 C 层中调用的混合是不同的,并且近似部分的实现也略有不同。
binom
直接在
orthogonal_eval
中的 C 扩展层中实现并进行一些调整以减少小输入的精度问题。
misc
直接在Python中实现小输入的东西并利用
special
调用不经过
binom
本身——所以对于编程这些的人来说,有一定程度的重新发明轮子。由于它们在 Python 层和 C 层之间混合和匹配函数调用,因此存在一些精度差异也就不足为奇了。
关于python - scipy.special.binom 和 scipy.misc.comb 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21535852/
我正在使用 Web 服务在 Android 应用程序和 SOAP Web 服务之间发送数据。此 Web 服务仅接受序列化对象,而执行此操作的唯一方法是使用: import sun.misc.BASE6
我正在将 JDK 版本从 8 更新到 11,以解决某些并发数据结构的问题。 error: type Contended is not a member of package sun.misc [ERR
scipy.misc.logsumexp函数的输入参数有(a, axis=None, b=None, keepdims=False, return_sign=False),具体配置可参见这里,返回的
我刚刚安装了 scipy(通过 easy_install scipy),但由于某些原因 scipy.misc 丢失了。 看看这个: >>> import scipy >>> scipy >>> sc
在 kate(或 QtCreator)中,我有一个名为“Fixed[Misc]”的字体。我想检索字体文件,但没有找到:在我的字体目录中,我有一个“misc”目录,但我无法准确找到我在 kate 中使用
我在 python 脚本中导入 scipy.misc 时遇到问题。现在我知道其他人也提出了与此相关的问题,但他们的解决方案对我不起作用。 我正在编写的程序是这样开始的: import matplotl
我一直在使用 sun.misc 中的 BASE64Encoder 和 BASE64Decoder;我正在使用 Eclipse 并且不得不求助于警告,因为默认情况下访问权限仅限于它。 这些类工作得很好,
前言 unsafe类在jdk 源码的多个类中用到,这个类的提供了一些绕开jvm的更底层功能,基于它的实现可以提高效率。但是,它是一把双刃剑:正如它的名字所预示的那样,它是unsafe的,它所分配的
我正在使用具有以下导入的 scipy 1.3.1 运行旧代码: from scipy.misc import bytescale 出现以下错误: ImportError: cannot import
10 分钟前,我尝试连接 phppgadmin 5.1,但我在 Web 服务器错误日志中发现了此错误消息:“Misc 在/usr/share/phppgadmin/classes/Misc.php 第
我想调整表面法线“图像”(H * W * 3)的大小。问题在于数组中存在可取数字。如何使用scipy.misc.resize或cv2.resize调整大小? 最佳答案 cv2.resize支持负数。
jdk1.8.0_144中的src.zip包含Float.java 这又指的是 sun.misc.FloatingDecimal。我在 src.zip 中找不到它?谁能告诉我它在哪里?我可以找到 gr
我正在开发一个供其他团队使用的库,在库中有一些公开的类/方法,但我不希望其他人使用它们。 像java中的sun.misc包这样的东西,虽然所有的类都是公共(public)的,但编译器在使用它时会抛出“
10 分钟前,我尝试连接 phppgadmin 5.1,但我在 Web 服务器错误日志中发现了此错误消息:“Misc 在/usr/share/phppgadmin/classes/Misc.php 第
虽然也有类似的问题(例如 A 、 B 和 C ),但他们的答案并不能解决我的问题。 我使用的是针对 Android API 18 的 Android Studio 1.5.1(Android KitK
我将在我的代码中使用 sun.misc.BASE64Decoder 的 decodeBuffer(String inputString) 。多个线程将在同一个解码器对象上调用此函数。 这个线程安全吗?
我知道 sun.* 包不是官方 Java API 的一部分。但是,我需要使用一些类似于 Perf 提供的功能:特别是基本 JVM 指标(堆、线程、PermGen 等)、GC 的 JvmStat 计数器
我有一个选项卡设置为使用 API8 max 的 Activity 扩展。在此选项卡中,我正在初始化一些 TextView、EditText 和 SeekBar 对象,如下所示。 我正在寻找一种更通用的
sun.misc.Unsafe 或 theUnsafe 实例线程安全吗? 最佳答案 Unsafe 的方法不是线程安全的。您需要像往常一样同步访问您想要自己操作的数据。然而,访问实例 theUnsafe
我想知道我在这里做错了什么...... 我正在试验一个简单而人为的函数,它对某些 x 值求导: f(x) = x^3,然后计算导数 f'(x) = 3x^2 对于 x 在 1、2、3 处的值 >>>
我是一名优秀的程序员,十分优秀!