有没有人知道我可以用来查找我的cython代码中的错误的方法?我正在使用IPython笔记本的cython扩展,并且当你需要使用的所有代码都是这样的时候,它开始变得烦人不得不一直在寻找错误。
ValueError Traceback (most recent call last)
<ipython-input-430-92c892360488> in <module>()
----> 1 knn_alg(temp, start, L, w, B)
C:\Users\Patrick\.ipython\cython\_cython_magic_3cbae3230d887da1f1bc3c64de69c379.pyd in _cython_magic_3cbae3230d887da1f1bc3c64de69c379.knn_alg (C:\Users\Patrick\.ipython\cython\_cython_magic_3cbae3230d887da1f1bc3c64de69c379.c:3333)()
C:\Users\Patrick\.ipython\cython\_cython_magic_3cbae3230d887da1f1bc3c64de69c379.pyd in _cython_magic_3cbae3230d887da1f1bc3c64de69c379.knn_alg (C:\Users\Patrick\.ipython\cython\_cython_magic_3cbae3230d887da1f1bc3c64de69c379.c:2534)()
ValueError: Buffer has wrong number of dimensions (expected 2, got 1)
我知道这意味着什么以及要寻找什么,但如果它输出一些显示错误的地方就会很好。任何帮助将不胜感激
答案 0 :(得分:2)
如果没有看到更多代码,很难确定您的错误是什么。 话虽如此,看起来错误是在Cython代码之后评估的单元格的第1行。
错误的含义是您将1-D数组传递给期望2-D数组的函数。
看起来这发生在函数knn_alg
内的一个函数调用中。
这是一个最小的工作示例,显示您做错了什么:
def break_things(double[:,:] a):
pass
def break_inner_things(double[:] a):
# Here you're passing a 1-D array to a function that expects a 2D array.
break_things(a)
如果您需要更详细的调试消息,Cython有一个debugger。 对于像这样简单的东西,我只会找到一个仍然显示错误的小例子,然后插入print语句来验证所涉及的事物的维数。 通过上面的例子,这将是
def break_things(double[:,:] a):
pass
def break_inner_things(double[:] a):
print a.ndim
break_things(a)