【问题标题】:using datetime and bool in cython在 cython 中使用 datetime 和 bool
【发布时间】:2015-11-05 01:19:27
【问题描述】:

如何在 Cython 中定义 datetime64[D]timedelta[D]bool_ dtypes?

假设我有

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

谢谢

【问题讨论】:

    标签: numpy cython


    【解决方案1】:

    您不能直接在 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]')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多