Как сохранить логическую маску как атрибут класса Cython?Python

Программы на Python
Ответить
Anonymous
 Как сохранить логическую маску как атрибут класса Cython?

Сообщение Anonymous »

Мне не удалось сохранить логическую маску как атрибут класса Cython. В реальном коде эта маска нужна мне для более эффективного выполнения задач. Ниже приведен пример кода:
core.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
#Error
Когда я запускаю script.py, он успешно компилирует Cython, но выдает ошибку:

Код: Выделить всё

Traceback (most recent call last):
File "script.py", line 8, in 
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?

Подробнее здесь: https://stackoverflow.com/questions/582 ... thon-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»