我想使用Cython来加速我的Python代码,类似于Cython's Numpy tutorial。我给你一个我想要的MWE:
测试功能:
import pyximport
pyximport.install()
import CythonModule2 as cm2
print cm2.read_data()
Cython模块CythonModule2.pyx
:
from libc.stdio cimport *
import numpy as np
cimport numpy as np
cdef packed struct CData:
np.float32_t A
np.uint8_t CH1, CH2
np.int64_t D
def read_data():
cdef np.ndarray[CData] coins = np.empty(10, dtype=[('A', 'f4'),
('CH1', '|u1'), ('CH2', '|u1'),
('D', '<i8')])
return coins;
函数read_data()
中的定义产生以下错误消息(并且C ++“以不寻常的方式终止”):
ValueError:缓冲区dtype不匹配;下一个字段位于偏移6但预期为8
我可以格式化64位(8字节)变量中的所有条目,但我希望保持数据尽可能小,以节省空间。
顺便说一下:我的电脑设置如下:
mingw32-gcc-4.8.1
。我认为这与前一个问题中的错误不同,因为我更新了Cython:Passing a structured numpy array with strings to a cython function
通过使用distutils
编译模块,显示相同的错误。执行该功能时,会发生上述错误。
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize('CythonModule2.pyx'))
import CythonModule2 as cm2
print cm2.read_data()
没有名为CythonModule2.pyd
的文件。创建的文件(CythonModule2.c
,CythonModule2.def
,CythonModule2.o
)存储在以下位置:
C:\用户\ Myself.pyxbld \ temp.win32-2.7 \推出\派热克斯\
答案 0 :(得分:0)
海湾合作委员会:5.2Cython:0.23.2
Python:2.7.10
Numpy:1.9.2
操作系统:Linux
我的环境一切正常。运行脚本的结果:
[(1.5573903757535362e+29, 155, 127, 9195066190654341120)
(7.709522375552512e+37, 229, 106, 7556991212100550555)
(4.57762169340988e-41, 176, 211, 9056738852782958815)
(nan, 0, 0, 140305456158120)
(8.456264184549564e+24, 155, 127, 9195058375810875392)
(-98784247808.0, 223, 104, 753066985721462683)
(0.04620097950100899, 65, 0, 7696651763176177664)
(38982272417792.0, 0, 0, 140305575418824)
(0.04620097950100899, 61, 61, 4412750543122677053)