我想知道是否有一種快速的方法可以找到一個 numpy 矩陣的每一行的最左邊的非空值的索引??梢哉f我有這個: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函數(shù)內部的循環(huán)很慢):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個贊
獲取非空值的布爾數(shù)組,np.isnan然后獲取每行中的第一個argmax(1)索引,最后索引到輸入數(shù)組中 -
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.])
添加回答
舉報
0/150
提交
取消