我收到错误 - TypeError:'list'不支持缓冲区接口 - 尝试使用Cython运行以下代码时:
cdef int[:] lista = range(1000)
我是Cython的新手。这对我来说似乎很简单,但我不知道为什么它不起作用......
答案 0 :(得分:3)
不保证列表的所有条目都是相同类型,因此它们的内存不会被排列为C整数数组,这是您的内存视图所期望的。
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}匹配最好的办法是为两个部分准确指定数据类型。