我有一个数组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/