Ожидаемый 'Py_ssize_t', но получил 'long' - PullRequest
0 голосов
/ 22 апреля 2020

Я переопределяю SLI C для сегментации изображений просто для удовольствия. Но я ленивый и не хочу писать функцию для подключения всего кластера, поэтому я решаю использовать _enforce_label_connectivity_cython() от skimage, но я получаю сообщение об ошибке Buffer dtype несоответствие, и я не знаю, как ее решить

enter image description here.

1 Ответ

0 голосов
/ 24 апреля 2020

Тип данных np.expand_dims(boundaries, axis=0), то есть тип элементов внутри массива, не тот, который ожидает функция Cython. Он ожидает, что Py_ssize_t это тип, который зависит от вашей платформы, но он получает массив типа long, что означает np.int64. Чтобы получить правильный тип, я думаю вы можете сделать:

labels = _enforce_label_connectivity_cython(
    np.expand_dims(boundaries, axis=0).astype(np.intp),
    min_size,
    max_size,
)

Если это не сработает, попробуйте .astype(np.int32). Опять же, точный ответ зависит от вашей ОС и Python версии, но если я правильно помню, np.intp должен быть правильного типа, чтобы соответствовать Py_ssize_t.

...