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!
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? –