gpt4 book ai didi

python - Cython:初始化结构化 Numpy 数组 ValueError

转载 作者:行者123 更新时间:2023-11-28 19:16:37 25 4
gpt4 key购买 nike

我想使用 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: Buffer dtype mismatch; next field is at offset 6 but 8 expected

我可以将所有条目格式化为 64 位(八字节)变量,但我希望数据尽可能小以节省空间。

顺便说一句:我的电脑设置如下:

  • Windows 7 64 位
  • 32 位 Python(x,y) 2.7.6
  • MinGW 的编译器 mingw32-gcc-4.8.1
  • Cython 版本 0.23.2
  • Numpy 版本 1.10.0

自从我更新 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()

编辑 2:输出文件

没有名为 CythonModule2.pyd 的文件。创建的文件(CythonModule2.cCythonModule2.defCythonModule2.o)存储在以下位置:

C:\Users\Myself.pyxbld\temp.win32-2.7\Release\pyrex\

最佳答案

GCC: 5.2

Cython: 0.23.2

Python: 2.7.10

Numpy: 1.9.2

OS: 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)

关于python - Cython:初始化结构化 Numpy 数组 ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32825809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com