预期 'Py_ssize_t' 但得到 'long'
Expected 'Py_ssize_t' but got 'long'
我正在为图像分割重新实现 SLIC 只是为了好玩。但是我很懒惰,我不想编写一个函数来连接所有集群,所以我决定使用 skimage 中的 _enforce_label_connectivity_cython()
但我收到 Buffer dtype mismatch 错误,我现在不知道如何解决它
。
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)
。同样,确切的答案取决于您的 OS 和 Python 版本,但如果我没记错的话,np.intp
应该是匹配 Py_ssize_t
.
的正确类型
我正在为图像分割重新实现 SLIC 只是为了好玩。但是我很懒惰,我不想编写一个函数来连接所有集群,所以我决定使用 skimage 中的 _enforce_label_connectivity_cython()
但我收到 Buffer dtype mismatch 错误,我现在不知道如何解决它
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)
。同样,确切的答案取决于您的 OS 和 Python 版本,但如果我没记错的话,np.intp
应该是匹配 Py_ssize_t
.