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

2024-04-24 19:41:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 方法函数numpyfordatadefnp矩阵
1条回答
网友
1楼 · 发布于 2024-04-24 19:41:07

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.])

相关问题 更多 >