python - 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
魔法可以做到这一点?
解决方案
您可能可以将其优化为更快,但这里是您搜索的矢量化版本:
axis = 1
mask = np.where(x==val)[axis]
first, last = np.amin(mask), np.amax(mask)
它首先使用查找val
数组中的元素并沿所需轴np.where
返回索引的min
和max
。
推荐阅读
- graphql - 使用 amplify 和 graphql,更新表中的数组字段会将更新数组附加到现有表数组而不是替换它
- date - 如何使用 amcharts4 在图中获取日期格式 M/d/yyyy?
- javascript - JS Regex 匹配来自字符串的加拿大邮政编码
- html - 动态调整文本和按钮的大小以保持在容器内
- javascript - 使用 momentjs 和 moment-timezone.js 转换时区
- javascript - 为什么 Number("x") == BigInt("x") ... 只是有时?
- javascript - 子布局组件中的 React/MUI 暗模式切换
- python - Flask - 在应用程序上下文之外工作
- scala - 从 Scala 项目生成文件以用于从 SBT 中构建 C 程序
- linux - 如何让孩子处理给定的孩子?