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

我想知道是否有一种快速的方法可以找到一个 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 idx

np.apply_along_axis(fn, 1, data)


蓝山帝景
浏览 349回答 1
1回答

叮当猫咪

获取非空值的布尔数组,np.isnan然后获取每行中的第一个argmax(1)索引,最后索引到输入数组中 -In [19]: idx = (~np.isnan(data)).argmax(1)In [20]: idxOut[20]: array([2, 1, 0, 3])In [21]: data[np.arange(len(idx)), idx]Out[21]: array([10., 30., 40., 10.])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python