我未能将布尔掩码保存为 Cython 类的属性。在实际代码中,我需要这个掩码来更有效地执行任务。下面是一个示例代码:
核心.pyx
import numpy as np
cimport numpy as np
cdef class MyClass():
cdef public np.uint8_t[:] mask # uint8 has the same data structure of a boolean array
cdef public np.float64_t[:] data
def __init__(self, size):
self.data = np.random.rand(size).astype(np.float64)
self.mask = np.zeros(size, np.uint8)
script.py
import numpy as np
import pyximport
pyximport.install(setup_args={'include_dirs': np.get_include()})
from core import MyClass
mc = MyClass(1000000)
mc.mask = np.asarray(mc.data) > 0.5
错误
当我运行script.py它成功编译 Cython,但抛出错误:
Traceback (most recent call last):
File "script.py", line 8, in <module>
mc.mask = np.asarray(mc.data) > 0.5
File "core.pyx", line 6, in core.MyClass.mask.__set__
cdef public np.uint8_t[:] mask
ValueError: Does not understand character buffer dtype format string ('?')
解决方法
我目前的解决方法是将掩码传递给我需要的所有函数,cast=True例如:
cpdef func(MyClass mc, np.ndarray[np.uint8_t, ndim=1, cast=True] mask):
return np.asarray(mc.data)[mask]
问题
关于如何将面具存储在 Cython 类中是否有任何想法?
米琪卡哇伊
慕码人8056858
相关分类