2013-11-20 147 views
7

我正在學習Cython。我在將numpy數組傳遞給Cython時遇到了問題,並且不太瞭解發生了什麼。你可以幫幫我嗎?傳遞numpy數組到Cython

我有兩個簡單數組:

a = np.array([1,2]) 
b = np.array([[1,4],[3,4]]) 

我要計算它們的點積。在Python/numpy的一切工作正常:

>>> np.dot(a,b) 
array([ 7, 12]) 

我翻譯的代碼,用Cython(如下:http://docs.cython.org/src/tutorial/numpy.html):

import numpy as np 
cimport numpy as np 

DTYPE = np.int 
ctypedef np.int_t DTYPE_t 

def dot(np.ndarray a, np.ndarray b): 
    cdef int d = np.dot(a, b) 
    return d 

它編譯沒有問題,但返回一個錯誤:

>>> dot(a,b) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "test.pyx", line 8, in test.dot (test.c:1262) 
    cdef int d = np.dot(a, b) 
TypeError: only length-1 arrays can be converted to Python scalars 

你能告訴我爲什麼以及如何正確地做到這一點?不幸的是谷歌沒有幫助...

謝謝!

回答

7

你的結果是np.ndarray,而不是int。它試圖將第一個轉換爲後者失敗。而不是

def dot(np.ndarray a, np.ndarray b): 
    cdef np.ndarray d = np.dot(a, b) 
    return d 
+0

更多與OP腳本相關的問題:本例中實際上需要'DTYPE'和'ctypedef'的行嗎?他們的標誌在內部使用嗎? –