【发布时间】:2019-09-10 17:53:01
【问题描述】:
我有一个np.ndarray,看起来像这样:
print(x)
[[1 3 None None None None]
[0 2 3 4 None None]
[1 5 4 None None None]
[1 6 0 4 None None]
[7 6 5 1 3 2]
[4 7 2 8 None None]
[7 4 3 None None None]
[4 6 8 5 None None]
[7 5 None None None None]]
我将它提供给定义如下的 cython 函数:
cpdef y(int[:,::1] x):
...
这会引发错误:ValueError: Buffer dtype mismatch, expected 'int' but got Python object
这可能是因为数组中存在Nones,因为将它们修改为0s 可以消除错误。但是None 的存在应该不会造成问题,如下所示:Cython Extension Types
那么,到底发生了什么?有没有快速的解决方案?
【问题讨论】:
-
Numpy 数组如
a = np.array([1, None]),a.dtype是object,这就是问题所在,int[:,::1]期望一个 int 缓冲区,但得到一个对象缓冲区 -
该文档看起来好像整个变量可以是
None,而您有一个由int和non-int/None值组成的数组,这是无效的。 -
那么,有没有简单的修正方法呢?我可以将
Nones 类型转换为整数吗?还是我只需要将Nones 转换为一些int值?