我有一个数组my_array,由于特定原因,我想忽略它的值-5和-10(是的,在下面的示例中没有-10,但是在其他数组中,我必须管理是) ,并获取数组三个最小值的索引,并将它们附加到标题为lista_indices_candidatos的新列表中。

这是我的代码。

my_array = [4, -5, 10, 4, 4, 4, 0, 4, 4]
a = np.array(my_array)
indices = a.argsort()
indices = indices[a[indices] != -5]
indices = indices[a[indices] != -10]
lista_indices_candidatos = []
for i in indices[:3]:
    lista_indices_candidatos.append(i)
print lista_indices_candidatos


这使我从数组[6, 0, 3]的3个最小值[4, -5, 10, 4, 4, 4, 0, 4, 4]的索引

问题是,如果存在重复的值,这就是前三个最小值(第一个4(索引0),第二个4(索引3)),而忽略了数组的其余4

如何更改代码以完全随机地获得三个最小值,而不必始终获取前三个?

最佳答案

这个怎么样:

import random

def eachIndexSorted(a):  # ... without -5 and -10
  for value in sorted(set(a) - { -5, -10 }):
    indexes = [ i for i in range(len(a)) if a[i] == value ]
    random.shuffle(indexes)
    for i in indexes:
      yield i

def firstN(iterator, n):
  for i in range(n):
    yield iterator.next()

print list(firstN(eachIndexSorted(my_array), 3))


如果您的数据量很大,则对整个集合进行排序可能会太昂贵;迭代地找到每个下一个最小值可能是一个更好的方法。 (如果这方面不清楚或对您很重要,请询问更多详细信息。)

关于python - 随机获取Python中重复值数组的3个最小值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26863141/

10-11 16:14