【发布时间】:2017-12-05 18:08:13
【问题描述】:
这就是我打算在 Python 中做的事情:
我有一个数组 (freq_arr)。我想找到第一组非零元素的索引。我从头开始搜索非零元素,当我找到第一个非零元素(第一个元素是 5,在下面的示例中)时,我记录它的索引(4,在下面的示例中)。我搜索下一个,并记录它的索引(将是 5)。如果我遇到一个零,我想忽略它并继续搜索非零值。这样,我考虑索引 4,5,6,7,8,9 和 10 的值 5,6,0,8,9,0,1。在这些值之后,有五个零,因此我停止搜索.输出中最多可以存在 两个零,然后继续搜索。但是,如果遇到 3 个或更多零,我想停止搜索。
输入:
freq_arr = np.array([0, 0, 0, 0, 5, 6, 0, 8, 9, 0, 1, 0, 0, 0, 0, 3, 6, 0])
输出:
out_arr_indices = [4, 5, 6, 7, 8, 9, 10]
我知道使用 for 循环对此进行编码,但我想避免它,因为它效率不高。请让我知道如何做到这一点。
数组将是一维的。每个元素将在 5000 到 20000 的范围内。
【问题讨论】:
-
对于像这样有很多计数和异常的操作,我建议从
numba包中查看@jit。写出你的循环代码并给它一个@jit装饰器,你通常会几乎和矢量化解决方案一样快,代码更清晰。