【发布时间】:2015-08-31 13:16:42
【问题描述】:
我正在尝试加快 Python 脚本的速度。我已经对代码进行了概要分析,并且已经在纯 Python 中进行了很多重构。看来我仍然花费大量时间以如下方式访问一些 numpy 数组:
KeyArray[BoolArray[index]]
其中 KeyArray 是 ndim=2 并包含字符串,BoolArray 是 ndim=1 并包含 bool 并且索引是 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 thx 进行编辑。更容易阅读
-
对于它的价值,将单个花哨的索引语句移动到 Cython 不会加快速度。它实际上已经全部是 C。与其专注于将事物转移到 Cython,有什么方法可以让您重新考虑您的数据结构?您存储数据的方式是否可以重构,使
KeyArray[BoolArray[index]]变得更像KeyArray[index]?
标签: python numpy indexing cython