我想用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/