为了账号安全,请及时绑定邮箱和手机立即绑定

如何有效地找到numpy矩阵中一行的最左边的非空值的索引列?

如何有效地找到numpy矩阵中一行的最左边的非空值的索引列?

蓝山帝景 2021-05-30 16:57:52
我想知道是否有一种快速的方法可以找到一个 numpy 矩阵的每一行的最左边的非空值的索引。可以说我有这个:data = np.array([[np.nan, np.nan, 10,      1],                 [np.nan, 30,      50,      np.nan],                 [40,      np.nan, np.nan, 5],                 [np.nan, np.nan, np.nan, 10]])我想分别返回10、30、40和10的索引,即2、1、0和3。以下工作但它并不完全有效(例如,fn函数内部的循环很慢):def fn(row):    for idx, v in enumerate(row):         if not np.isnan(v):              return idxnp.apply_along_axis(fn, 1, data)
查看完整描述

1 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

获取非空值的布尔数组,np.isnan然后获取每行中的第一个argmax(1)索引,最后索引到输入数组中 -


In [19]: idx = (~np.isnan(data)).argmax(1)


In [20]: idx

Out[20]: array([2, 1, 0, 3])


In [21]: data[np.arange(len(idx)), idx]

Out[21]: array([10., 30., 40., 10.])


查看完整回答
反对 回复 2021-06-01
  • 1 回答
  • 0 关注
  • 348 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信