I am learning Cython. I have problem with passing numpy arrays to Cython and don't really understand what is going on. Could you help me?
I have two simple arrays:
a = np.array([1,2])
b = np.array([[1,4],[3,4]])
I want to compute a dot product of them. In python/numpy everything works fine:
>>> np.dot(a,b)
array([ 7, 12])
I translated the code to Cython (as here: 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
It compiled with no problems but returns an error:
>>> 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
Could you tell me why and how to do it correctly? Unfortunately Google was not helpful...
Thanks!
Your result is np.ndarray, not int. It fails trying to convert first one to latter. Do instead
def dot(np.ndarray a, np.ndarray b):
cdef np.ndarray d = np.dot(a, b)
return d
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With