Numpy Cython错误:未声明的名称未内置:数组

Numpy Cython错误:未声明的名称未内置:数组,numpy,cython,sage,Numpy,Cython,Sage,我正在编译这个Cython代码,我得到了以下错误 undeclared name not builtin: array 它在Sage笔记本中显示相同的错误。我认为它不是在识别numpy数组,而是 很奇怪,因为我已经进口了numpy cython(''' cimport numpy as np ctypedef np.int DTYPE def computeDetCy(np.ndarray[DTYPE, ndim=2] matrix): return de

我正在编译这个Cython代码,我得到了以下错误

undeclared name not builtin: array
它在Sage笔记本中显示相同的错误。我认为它不是在识别numpy
数组,而是
很奇怪,因为我已经进口了numpy

 cython('''
  cimport numpy as np
  ctypedef np.int DTYPE
  def computeDetCy(np.ndarray[DTYPE, ndim=2] matrix):      
      return determ(matrix,len(matrix))

cdef inline int determ(np.ndarray[DTYPE, ndim=2] matrix, int n):
cdef int det = 0
cdef int p=0
cdef int h
cdef int k
cdef int i=0
cdef int j=0
cdef np.ndarray[DTYPE, ndim=2] temp=np.zeros(4,4)
if n == 1:
    return matrix[0][0]
elif  n == 2:
    return matrix[0][0]*matrix[1][1] - matrix[0][1]*matrix[1][0]
else:
    for p in range(0, n):
        h = 0
        k = 0
        for i in range(1, n):
            for j in range(0, n):
                if j==p:
                    continue 
                temp[h][k] = matrix[i][j]
                k+=1
                if k ==(n-1):
                    h+=1
                    k=0
        det= det + matrix[0][p] * (-1)**p * determ(temp, n-1)

    return det

computeDetCy(array([[13,42,43,22],[12,67,45,98],[23,91,18,54],[34,56,82,76]]))

''')

是的,但是您将其作为
np
导入,而不是导入
*
(无论如何这是个坏主意),并且没有进行常规的Python导入。(有时您必须同时执行
cimport
import
,请参阅。)

然而,即使在

import numpy as np
使用
np.array
,我仍然会得到一些错误

ValueError: Buffer dtype mismatch, expected 'DTYPE' but got 'long'

所以这解决了你的问题,但不是全部,我尝试的方法无法解决这个新问题。

你的答案解决了报告中的问题。第二个问题应该通过将
DTYPE
的定义更改为
ctypedef np.int\t DTYPE
(即在
ctypedef
中,将
np.int
替换为
np.int\t
)。