ndarray的行索引值大于array

时间:2019-05-15 09:20:18

标签: python python-3.x pandas numpy

我有一个形状为(X,5)的数组:

M = [[1,2,3,4,5],
     [6,7,8,9,1],
     [2,5,7,8,3]
     ...]

和一个形状为(X,1)的数组:

n = [[3],
     [7],
     [100],
     ...]

现在我需要为每行获取M> = n的第一个索引,如果没有这样的索引,则为nan。 例如:

np.where([1,2,3,4,5] >= 3)[0][0] # Returns 2
np.searchsorted(np.array([1,2,3,4,5]), 3) # Returns 2

这些示例分别应用于每一行(我可以循环X次,因为两个数组的长度均为X)。

我想知道,有没有一种方法可以以多维的方式一次获得所有索引的输出?

类似的东西:

np.where(M>=n)

谢谢

编辑:M中的值未排序,我仍在寻找第一个符合索引的索引/出现M> = n(所以可能不是搜索排序的)

1 个答案:

答案 0 :(得分:1)

您可以先检查哪些行索引小于或等于n,然后使用argmax获取每一行的第一个True。对于所有列均为False的行,例如,我们可以使用np.where将它们设置为np.nan

M = np.array([[1,2,3,4,5],
 [6,7,8,9,1],
 [2,5,7,8,3]])

n = np.array([[3],[7],[100]])

le = n<=M

# array([[False, False,  True,  True,  True],
#        [False,  True,  True,  True, False],
#        [False, False, False, False, False]])

lea = le.argmax(1)
has_any = le[np.arange(len(le)), lea]
np.where(has_any, lea, np.nan)
# array([ 2.,  1., nan])