python - 第一次和最后一次出现的逻辑表达式匹配之间的 Numpy 子集数组

标签 python arrays numpy indexing

我有一个 numpy 数组,它是一个向量(1 × n)。我想在它遇到 bool 表达式(大于某个数字)的第一次和最后一次出现之间对它进行子集化。

即大致如下:

positions = numpy.where(myArray >= value)[0]
subset = myArray[positions[0]:positions[-1]+1]

这是一种解决方案,但据我了解,这将涉及搜索整个数组两次以检索 positions 结果。 myArray 可能会很大,那么还有其他解决方案吗?

最佳答案

让我们列出一些方法:

def original(arr, val):
    pos = np.where(arr>=val)[0]
    return arr[pos[0]:pos[-1]+1]

def with_argmax(arr, val):
    pos = (arr>=val)
    return arr[pos.argmax():-pos[::-1].argmax() or None]

使用中等大小的数组和几个要剪辑的值进行设置:

arr = np.ones(1E5)
arr[:300] = 0; arr[-300:]=0

时间安排:

%timeit original(arr,1)
1000 loops, best of 3: 504 µs per loop

%timeit with_argmax(arr,1)
1000 loops, best of 3: 297 µs per loop

相同的数组大小,具有更多要剪辑的值:

arr = np.ones(1E5)
arr[:2E4] = 0; arr[-2E4:]=0

时间安排:

%timeit original(arr,1)
1000 loops, best of 3: 528 µs per loop

%timeit with_argmax(arr,1)
1000 loops, best of 3: 296 µs per loop

您真正想要的是一个“查找第一个非零元素”例程,该例程当前不在 numpy 中,但针对 numpy 2.0。更多信息可查看here .

关于python - 第一次和最后一次出现的逻辑表达式匹配之间的 Numpy 子集数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22478240/

相关文章:

python - 我尝试在Flask中使用Blueprints进行404错误处理,但似乎无法正常工作。这是我的代码:

php - 在mysql数据库的一列中插入多个值

python - 切片除第一个元素之外的所有元素,除非单个元素

python - Python 中的多变量核密度估计

python - 如何使用 opencv 和 python 翻转图像(没有 cv2.flip)

python - '_sre.SRE_Match' 对象不可订阅

python - 尝试在 python 中多处理需要列表参数的函数

c# - 避免随机重复

python - 用另一个数组求和一个数组 - python

numpy - 如何在 numpy 数组的特定位置添加数字