繁体   English   中英

快速索引:Cython与bol和str的numpy数组

[英]Fast indexing: Cython with numpy array of bool and str

我正在尝试加速Python脚本。 我已经在纯Python中分析了代码并重新考虑了很多因素。 似乎我仍然花费大量时间以一种看起来像这样的方式访问一些numpy数组:

KeyArray[BoolArray[index]]

其中KeyArray是ndim = 2并且包含字符串, BoolArray是ndim = 1并且包含bool而index是一个int

我正在努力学习Cython以了解它的速度有多快。 我编写了以下不起作用的脚本:

import numpy as np
cimport numpy as np

def fastindexer(np.ndarray[np.str_t,ndim=1] KeyArray, np.ndarray [np.bool_t,ndim=2] BoolArray, np.int_t DateIndex):
    cdef np.ndarray[np.str_t,ndim=1] FArray = KeyArray[BoolArray[DateIndex]]
    return FArray

据我所知,str / bool类型在np数组中不可用。 我试图施放,但我不明白应该如何编写。

欢迎所有帮助

正如@Joe所说,将单个索引语句移动到Cython将不会给你速度。 如果您决定将更多程序移至Cython,则需要解决许多问题。

1)您使用def而不是cdef ,限制您使用仅限Python的功能。
2)您使用旧的缓冲区语法。 了解内存视图
3)切片二维数组很慢,因为每次都会创建一个新的内存视图。 也就是说,它仍然比Python快得多,但是为了达到最佳性能,你必须使用不同的方法。

这是让你入门的东西。

cpdef func():
   cdef int i
   cdef bool[:] my_bool_array = np.zeros(10, dtype=bool)
   # I'm not if this next line is correct 
   cdef char[:,:] my_string_array = np.chararray((10, 10))
   cdef char answer

   for i in range(10):
       answer = my_string_array[ my_bool_array[i] ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM