首页 > 解决方案 > numpy 沿着第一个和最后一个出现值出现的轴查找切片

问题描述

我有一个带有整数值的 3D numpy 数组,定义为:

import numpy as np
x = np.random.randint(0,  100, (10, 10, 10))

现在我想做的是沿着给定轴(比如 1)找到最后一个切片(或者第一个切片),其中出现特定值。目前,我做了类似的事情:

first=None
last=None
val = 20

for i in range(len(x.shape[1]):
    slice = x[:, i, :]
    if len(slice[slice==val]) > 0:
        if not first:
            first = i
        last = i

return first, last

这似乎有点不合时宜,我想知道是否有一些numpy魔法可以做到这一点?

标签: pythonnumpy

解决方案


您可能可以将其优化为更快,但这里是您搜索的矢量化版本:

axis = 1
mask = np.where(x==val)[axis]
first, last = np.amin(mask), np.amax(mask)

它首先使用查找val数组中的元素并沿所需轴np.where返回索引的minmax


推荐阅读