在Python3/Numpy中过滤数组并返回索引

Kat*_*tya 6 python filtering numpy python-3.x

Python3/Numpy中是否有任何内置函数可以过滤数组并返回剩下的元素的索引?类似于numpy.argsort的东西用于排序.我的滤波器设置了最小和最大阈值 - 必须滤除低于/高于最小值/最大值的所有值.

我见过Python的函数过滤器,但我没有看到使用它提取索引的方法.

编辑:答案中有很多有用的信息,谢谢!

正如@SvenMarnach指出的那样,面具就足够了:

mask = (min_value < a) & (a < max_value)
Run Code Online (Sandbox Code Playgroud)

现在我必须将此蒙版应用于其他形状相同的阵列a,但不确定最佳方法是什么...

Sve*_*ach 5

你可以得到一维数组中的元素的索引a是大于min_value比和Les max_value

indices = ((min_value < a) & (a < max_value)).nonzero()[0]
Run Code Online (Sandbox Code Playgroud)

虽然通常您不需要这些索引,但是使用遮罩可以更有效地工作。

mask = (min_value < a) & (a < max_value)
Run Code Online (Sandbox Code Playgroud)

此遮罩是一个布尔数组,其形状与相同a

编辑:如果有一个数组b相同的形状的作为a,可以提取的元素b对应于所述True条目mask

b[mask]
Run Code Online (Sandbox Code Playgroud)


Hoo*_*ked 5

numpy.where 对数组应用索引之后,该命令将返回它们的索引。例如:

import numpy as np
A = np.array([1,2,3,6,2])
np.where(A>2)
Run Code Online (Sandbox Code Playgroud)

给出:

(array([2, 3]),)
Run Code Online (Sandbox Code Playgroud)

一个更复杂的示例:

A = np.arange(27).reshape(3,3,3)
np.where( (A>10) & (A<15) )
Run Code Online (Sandbox Code Playgroud)

给出:

(array([1, 1, 1, 1]), array([0, 1, 1, 1]), array([2, 0, 1, 2]))
Run Code Online (Sandbox Code Playgroud)

我会同意@SvenMarnach,通常您不需要索引。