2013-04-16 69 views
2

如何在Cython中的函數將兩個不同類型的numpy數組(例如一個ints數組,另一個float數組)作爲參數?這裏http://docs.cython.org/src/userguide/numpy_tutorial.html?highlight=numpy#adding-types的例子顯示瞭如何爲INT數組做到這一點,但我想有這樣一個功能:在Cython函數中使用多種類型的numpy數組?

import numpy as np 
cimport numpy as np 
## how do define array types here? 
DTYPE = ??? 
ctypedef np.int_t DTYPE_t 
def foo(np.array arr_of_ints, np.array arr_of_floats): 
    # divide integers by floats 
    result = arr_of_ints/arr_of_floats 

如何才能做到這一點?謝謝。

回答

2

這是我真正快速烹飪的一個例子。

import cython 
import numpy as np 
cimport numpy as np 

@cython.boundscheck(False) 
def divide(np.ndarray[np.float_t, ndim=1] numer, 
      np.ndarray[np.int_t, ndim=1] denom): 
    cdef: 
     int n = min(numer.shape[0], denom.shape[1]) 
     np.ndarray[np.float_t, ndim=1] result = np.empty(n, dtype=float) 

    for i in range(n): 
     result[i] = numer[i]/denom[i] 

    return result 

我相信大多數的一切之上覆蓋着從你的問題的鏈接,但如果你不明白它的任何只問。

+1

謝謝。 「cimport numpy as np」和「cimport numpy as cnp」之間的區別是什麼,你把cnp和np分開了?是否有理由在「np.empty」之上調用「cnp.F」,其中F是一個函數(如「cnp.empty」)? – user248237dfsf