我需要使用numpy.argsort
函数(或相同的代码),但忽略具体的值(例如 -1 ),并将其保存在结果数组中>
如果这是列表:[5,8,1,-1,2,4],我需要类似[3,4,0,-1,1,2]的结果
我该怎么办?
答案 0 :(得分:2)
找到并删除每个要忽略的值,并记住它们的位置。例如,在这种情况下,您可以将索引和值存储为ignore = (3, -1)
。
照常排序其余列表。
重新插入缺少的元素:mylist.insert(ignore[0], ignore[1])
这会让你动起来吗?
答案 1 :(得分:1)
mylist=[5,8,1,-1,2,4]
print 'mylist: ',mylist
ignored=[]
new_my_list=[]
for i in range(len(mylist)):
if mylist[i]==-1:
ignored.append((i,mylist[i]))
else:
new_my_list.append(mylist[i])
print 'new_my_list without -1: ',new_my_list
mylist_sorted=list(np.argsort(new_my_list))
print 'mylist_sorted: ',mylist_sorted
temp_orders=list(np.zeros(len(mylist_sorted)))
for fr in range(len(mylist_sorted)):
idx=mylist_sorted[fr]
temp_orders[idx]=fr
print 'temp_orders: ',temp_orders
for ig in range(len(ignored)):
ig_add=ignored[ig]
temp_orders.insert(ig_add[0], ig_add[1])
print 'new_my_list with -1: ',temp_orders
对最后一个循环的改进:
for ig_idx, ig_value in ignored):
temp_orders.insert(ig_idx, ig_val)