In [86]: l = np.array([1,0,5,6,0,0,7,2])
In [87]: m = l==0
In [88]: m
Out[88]: array([False, True, False, False, True, True, False, False])
In [89]: i = np.argsort(m)
In [90]: i
Out[90]: array([0, 2, 3, 6, 7, 1, 4, 5])
In [91]: l[i]
Out[91]: array([1, 5, 6, 7, 2, 0, 0, 0])
import numpy as np
aaa = [1,0,5,6,0,0,7,2]
zero_idxs = np.where(np.array(aaa)==0)[0]
non_zero_idxs = [i for i in range(len(aaa)) if i not in zero_idxs]
np.hstack((np.array(aaa)[non_zero_idxs], np.zeros((len(zero_idxs)), dtype=int)))
在这种情况下
hstack
方法是好的,但如果在更一般的情况下需要这种方法:您可以使用所需的排序值构造一个新数组,并将argsort应用于该数组。这将为您提供重新排序原始的索引
不是很优雅,但它可以工作:
返回
在numpy中,花式索引有很长的路要走:)
我不是在进行排序,而是在创建a的两个新视图,一个视图中的所有元素都不同于0,另一个视图中的所有元素都是0,然后作为一个新数组水平堆叠
如果需要0以外的数字,只需将其替换为
k
相关问题 更多 >
编程相关推荐