我有一个形状为(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(所以可能不是搜索排序的)
答案 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])