python - Python中如何进行C语言计算

标签 python numpy ctypes

我想用Python做一些C语言计算的模拟。 比如unsigned short,单精度 float ……

ushort(0xffff) + 1 -> 0
0.1f * 0.1f -> ...

在 Python 中是否有一些库可以做到这一点?

我可以使用 ctypes 创建无符号短单 float ,但它们 不能做数学运算:

a = c_uint16(0xffff)
b = c_uint16(0x01)
a+b -> TypeError

或者,我可以使用 numpy:

>>> np.uint16(0xffff) + np.uint16(0x01)
Warning: overflow encountered in ushort_scalars
0

但与Python的正常计算相比,它非常慢:

>>> timeit.timeit("a+b", "import numpy as np;a=np.uint16(0xfffe);b=np.uint16(0x01)")
0.35577465681618037
>>> timeit.timeit("0xfffe+0x01")
0.022638104432360251
>>> timeit.timeit("np.uint16(0xfffe) + np.uint16(0x01)", "import numpy as np")
5.904765399236851  

编辑:

>>> timeit.timeit("a+b", "a=0xfffe;b=0x01")
0.040062221014295574  

最佳答案

编译0xfffe+0x01时,这将被折叠到常量65535中。您不是在计算加法需要多长时间——您只是在测量加载常量的时间:

>>> dis.dis(compile("0xfffe+0x01", "", "eval"))
  1           0 LOAD_CONST               2 (65535)
              3 RETURN_VALUE        

尽管如此,添加 NumPy 标量比添加内置整数要慢,但它不会比纯 Python 中的更好。考虑使用 Cython -- 它将允许您声明类型并以 C 速度执行计算。或者,尝试在 NumPy 中向量化您的代码(也就是说,如果速度真的很重要的话)。

关于python - Python中如何进行C语言计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6366017/

相关文章:

python - Spark安装问题-TypeError : an integer is required (got type bytes) - spark-2. 4.5-bin-hadoop2.7, hadoop 2.7.1, python 3.8.2

python - 创建每个实例的属性描述符?

python - Windows安装pycurl,DLL报错

python - 如何成功地将 python-telegram-bot 安装到 Termux 中?

python - 为什么对 numpy 数组的就地修改性能与被修改的维度顺序有关?

python - 在 numpy 数组上应用矢量化和非矢量化函数

python - 将元组列表中的 y 坐标与条件进行比较

不同操作系统上的python ctypes问题

python - 将哪种类型的 ctype 指针传递给 NI IMAQ 的 imgBayerColorDecode?

python - 更改按钮文本消息框