当前位置: 首页 > 知识库问答 >
问题:

查找大于阈值的NumPy数组的第一个和最后一个元素

居晗日
2023-03-14

我需要找到高于指定阈值的numpy.ndarray的第一个和最后一个元素。我找到了以下解决方案,这是有效的,但它看起来有点令人费解。有没有更简单/更蟒蛇的方式?

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1)

test = np.random.uniform(0, 1, 100)
above_threshold = test > 0.95
plt.plot(above_threshold)

indices = np.nonzero(above_threshold)
imin = np.min(indices)
imax = np.max(indices)

print(imin, imax)

共有3个答案

云俊名
2023-03-14

返回21和87。

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1)

test = np.random.uniform(0, 1, 100)
imin, imax = np.ma.flatnotmasked_edges(np.ma.masked_array(test, test <= 0.95))
暴阳州
2023-03-14

通过非零返回的元组第一个元素上的奇特索引就是您所需要的

imin, imax = np.nonzero(above_threshold)[0][[0,-1]]

In [465]: imin
Out[465]: 21

In [466]: imax
Out[466]: 87

使用此示例输出上述内容

In [454]: test
Out[454]:
array([4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01,
       1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01,
       3.96767474e-01, 5.38816734e-01, 4.19194514e-01, 6.85219500e-01,
       2.04452250e-01, 8.78117436e-01, 2.73875932e-02, 6.70467510e-01,
       4.17304802e-01, 5.58689828e-01, 1.40386939e-01, 1.98101489e-01,
       8.00744569e-01, 9.68261576e-01, 3.13424178e-01, 6.92322616e-01,
       8.76389152e-01, 8.94606664e-01, 8.50442114e-02, 3.90547832e-02,
       1.69830420e-01, 8.78142503e-01, 9.83468338e-02, 4.21107625e-01,
       9.57889530e-01, 5.33165285e-01, 6.91877114e-01, 3.15515631e-01,
       6.86500928e-01, 8.34625672e-01, 1.82882773e-02, 7.50144315e-01,
       9.88861089e-01, 7.48165654e-01, 2.80443992e-01, 7.89279328e-01,
       1.03226007e-01, 4.47893526e-01, 9.08595503e-01, 2.93614148e-01,
       2.87775339e-01, 1.30028572e-01, 1.93669579e-02, 6.78835533e-01,
       2.11628116e-01, 2.65546659e-01, 4.91573159e-01, 5.33625451e-02,
       5.74117605e-01, 1.46728575e-01, 5.89305537e-01, 6.99758360e-01,
       1.02334429e-01, 4.14055988e-01, 6.94400158e-01, 4.14179270e-01,
       4.99534589e-02, 5.35896406e-01, 6.63794645e-01, 5.14889112e-01,
       9.44594756e-01, 5.86555041e-01, 9.03401915e-01, 1.37474704e-01,
       1.39276347e-01, 8.07391289e-01, 3.97676837e-01, 1.65354197e-01,
       9.27508580e-01, 3.47765860e-01, 7.50812103e-01, 7.25997985e-01,
       8.83306091e-01, 6.23672207e-01, 7.50942434e-01, 3.48898342e-01,
       2.69927892e-01, 8.95886218e-01, 4.28091190e-01, 9.64840047e-01,
       6.63441498e-01, 6.21695720e-01, 1.14745973e-01, 9.49489259e-01,
       4.49912133e-01, 5.78389614e-01, 4.08136803e-01, 2.37026980e-01,
       9.03379521e-01, 5.73679487e-01, 2.87032703e-03, 6.17144914e-01])

吕飞翼
2023-03-14

你可以访问第一/最后一个元素

s = np.flatnonzero(test > 0.95)
imin, imax = s[0], s[-1]
 类似资料:
  • 假设我有一个数组, 并且我想要第一个值的索引大于65(即)。在Numpy中完成此任务的最快方法是什么(因为我的实际数据集要大得多)?

  • 本文向大家介绍JavaScript数组中的第一个元素和最后一个元素?,包括了JavaScript数组中的第一个元素和最后一个元素?的使用技巧和注意事项,需要的朋友参考一下 数组是一组元素。每个元素都有其自己的 索引值。我们可以使用这些索引访问任何元素。但是,对于最后一个元素,直到知道数组中存在的元素数量,我们才知道索引。在这种情况下,我们必须使用逻辑。让我们简要地讨论这些细节。 访问第一个元素 因

  • 问题内容: 我只需要找到1D中最小的第n个元素。 例如: 我想获得第五个最小的元素,所以我想要的输出是。 我当前的解决方案是这样的: 但是,找到5个最小的元素然后再选择最大的元素对我来说似乎很笨拙。有更好的方法吗?我是否缺少一个可以实现目标的功能? 有些问题的标题与此相似,但我没有看到任何答案。 编辑: 我本来应该提到它,但是性能对我来说很重要。因此,虽然不错的解决方案对我来说不起作用。 结果:

  • 本文向大家介绍php中删除数组的第一个元素和最后一个元素的函数,包括了php中删除数组的第一个元素和最后一个元素的函数的使用技巧和注意事项,需要的朋友参考一下 对于一个php数组,该如何删除该数组的第一个元素或者最后一个元素呢?其实这两个过程都可以通过php自带的函数 array_pop 和 array_shift 来完成,下面就具体介绍一下如何来操作。 (1)使用 array_pop 删除数组的

  • 问题内容: 假设我有以下形式的numpy数组: 我想找到第一个索引(对于每一列)的索引,其中值非零。 因此,在这种情况下,我希望返回以下内容: 我该怎么办? 问题答案: 首次出现的指标 使用沿轴(零轴这里列)非零的面具拿到第一的指标(真实值) 扩展到涵盖通用轴说明符,并且在沿着该轴找不到元素的非零的情况下,我们将有一个类似的实现- 请注意,由于所有值都会返回,因此如果需要的话,我们将直接使用生成最