Cython:TypeError:'list'没有带有list列表的缓冲区接口

时间:2017-05-31 12:48:20

标签: python cython

我收到错误 - TypeError:'list'不支持缓冲区接口 - 尝试使用Cython运行以下代码时:

cdef int[:] lista = range(1000)

我是Cython的新手。这对我来说似乎很简单,但我不知道为什么它不起作用......

1 个答案:

答案 0 :(得分:3)

不保证列表的所有条目都是相同类型,因此它们的内存不会被排列为C整数数组,这是您的内存视图所期望的。

Python array library应兼容:

cdef int[:] lista = array.array('i',range(1000))

最简单的选择可能是使用numpy数组。 arange function为您提供整数范围:

cdef int[:] lista = numpy.arange(1000,dtype=numpy.int32)

关于数据类型的一些注意事项:数组的类型和Cython中指定的类型需要匹配。在我的PC上,array代码按书面形式运行,numpy代码需要int32才能与cdef int[:]int64匹配(或未指定_代码与{{1}匹配最好的办法是为两个部分准确指定数据类型。