2013-11-20 11 views
7

Uczę się Cythona. Mam problem z przekazywaniem numpy tablic do Cythona i nie bardzo rozumiem, co się dzieje. Czy mógłbyś mi pomóc?Przekazywanie tablicy numpy do Cython

Mam dwóch prostych tablic:

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

chcę obliczyć iloczyn skalarny z nich. W Pythonie/numpy wszystko działa poprawnie:

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

przetłumaczyłem kod do Cython (jak tutaj: 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 

on skompilowany bez żadnych problemów, ale zwraca błą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 

Czy możesz mi powiedzieć, dlaczego i jak to zrobić poprawnie? Niestety Google nie był pomocny ...

Dzięki!

Odpowiedz

7

Twój wynik to np.ndarray, nie int. Nie udało się przekonwertować pierwszego do drugiego. Zamiast tego należy wpisać:

+0

Pytanie bardziej związane ze scenariuszem OP: czy wiersze z 'DTYPE' i' ctypedef' są rzeczywiście potrzebne dla tego przykładu? Czy są one używane gdzieś wewnątrz? –