use*_*023 6 python numpy pandas
我有一个数组[0.2,0,0,0,0.3,0,0,0,0.4]。我np.argsort用来排序值并获取该索引。
因此,以我的示例为例[1,5,9,2,3,4,6...]。但是,我只想获取非零值的索引数组。
仅在我的示例中[1,5,9]。
如何使用pandas和在python中实现它numpy?
使用np.nonzero和索引技巧
def sparse_argsort(arr):
indices = np.nonzero(arr)[0]
return indices[np.argsort(arr[indices])]
sparse_argsort(a)
array([0, 4, 8])
Run Code Online (Sandbox Code Playgroud)
一个班轮:
(lambda a: (lambda a_, i_: i_[np.argsort(a_[i_])])(a,np.nonzero(a)[0]))(a)
array([0, 4, 8])
Run Code Online (Sandbox Code Playgroud)
一行numpy
np.where(a != 0, a, np.nan).argsort()[:(a != 0).sum()]
Run Code Online (Sandbox Code Playgroud)
同样的逻辑,两行,效率更高
nz = a != 0
np.where(nz, a, np.nan).argsort()[:nz.sum()]
array([0, 4, 8])
Run Code Online (Sandbox Code Playgroud)