Numpy 在cython中使用datetime和bool
我如何在Cython中定义Numpy 在cython中使用datetime和bool,numpy,cython,Numpy,Cython,我如何在Cython中定义datetime64[D]、timedelta[D]和bool\uuD类型 如果我有 cimport cython cimport numpy as np import numpy as np from numpy cimport ndarray as ar cpdef myfunc(...): cdef: ar[double] my_float_var ar[np.int64] my_int_var ar[??] my
datetime64[D]
、timedelta[D]
和bool\uu
D类型
如果我有
cimport cython
cimport numpy as np
import numpy as np
from numpy cimport ndarray as ar
cpdef myfunc(...):
cdef:
ar[double] my_float_var
ar[np.int64] my_int_var
ar[??] my_datetime64_var
ar[??] my_bool_var
谢谢您不能在c级直接与这些类型交互,但您可以从视图中使用它们。例如:
In [59]: import pandas as pd
In [60]: a = pd.date_range('2014-1-1', periods=10).values
In [61]: b = np.array([True, True, False, False, False, True, True, False, False, False])
In [62]: c = np.array([pd.Timedelta(days=1).asm8 for _ in range(10)])
In [63]: %%cython
...: cimport numpy as np
...: def func(np.ndarray[np.int64_t] dates,
...: np.ndarray[np.uint8_t] bools,
...: np.ndarray[np.int64_t] deltas):
...: cdef:
...: int i, N = len(dates)
...: for i in range(N):
...: if bools[i]:
...: dates[i] += deltas[i]
...: return dates.view('M8[ns]')
In [65]: func(a.view('int64'), b.view('uint8'), c.view('int64'))
Out[65]:
array(['2014-01-01T18:00:00.000000000-0600',
'2014-01-02T18:00:00.000000000-0600',
'2014-01-02T18:00:00.000000000-0600',
'2014-01-03T18:00:00.000000000-0600',
'2014-01-04T18:00:00.000000000-0600',
'2014-01-06T18:00:00.000000000-0600',
'2014-01-07T18:00:00.000000000-0600',
'2014-01-07T18:00:00.000000000-0600',
'2014-01-08T18:00:00.000000000-0600',
'2014-01-09T18:00:00.000000000-0600'], dtype='datetime64[ns]')