在numpy矩阵中找到给定条件的指数

red*_*bia 5 python numpy

所以我有一个numpy矩阵,例如:

[[1,2,3],
[0,59,2],
[54,4,2]]
Run Code Online (Sandbox Code Playgroud)

现在我想找到索引,其中所有值都大于50(不是最大值).这应该给我[1,1],[2,0].

除了迭代,检查每个值并跟踪符合条件的值的索引然后返回这些对 - 你如何有效地做到这一点?

Bi *_*ico 10

你想使用numpy.where或numpy.argwhere:

import numpy as np
A = np.array([[99, 2, 3],
              [0, 59, 2],
              [54, 4, 2]])
np.where(A > 50)
# (array([0, 1, 2]), array([0, 1, 0]))
np.argwhere(A > 50)
# array([[0, 0],
#        [1, 1],
#        [2, 0]])
Run Code Online (Sandbox Code Playgroud)

  • @redrubia算法的复杂性是相同的,它在"A"中的元素数量是线性的.除了通过将每个元素与50进行比较之外,没有办法找到大于50的所有元素(除非你碰巧知道"A"被排序或类似的东西).但是对于大型数组来说它仍然要快得多,因为numpy使用的编译代码没有动态python代码的所有开销(动态类型检查和所有这些东西). (2认同)