python - ndarray 大于数组的值的逐行索引
问题描述
我有一组形状(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 (因此可能未搜索排序)
解决方案
您可以首先检查哪些行索引低于或等于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])
推荐阅读
- java - 春季升级时'没有名为'jpaMappingContext'的bean'
- webpack - 未捕获的类型错误:__webpack_require__(...).context 不是函数
- python - 在图形或森林中提取不同的树
- scala - 将播放版本从 2.3 升级到 2.4 后找不到 playRoutes
- c - 为什么qspi用stm32l476写错了?
- python - 我可以使用 AES IV 或 nonce 作为密码盐吗?
- python - 如何在pygame中制作一个空的形状?
- javascript - JS 中的这个 slice 调用有什么问题?
- javascript - 如何在 Javascript 中实现这种链接?
- excel - VBA嵌套集合-使用变量通过“嵌套”键/索引动态获取值