Я написал эту функцию (которая используется позже для выбора элитных видов в генетическом алгоритме), чтобы выбрать k лучших значений из n, где не все n значений уникальны. Прежде всего, я бы очень оценил любые комментарии к коду, но в первую очередь меня беспокоит тот факт, что по какой-либо причине значения во втором векторе (var2) также равны 0. Если вместо массива я использую список, это не происходит, но, конечно, я хочу использовать массивы, а не списки! Поэтому любые комментарии приветствуютсязначения массива, установленного на 0
import numpy
import tkMessageBox
'v1 is the vector of values from which k best must be selected for maximization problems'
class kbest():
def val_report(self,k,v1):
n=len(v1);
v1=numpy.asarray(v1)
v2=numpy.zeros(k)
v2=numpy.asarray(v2,int)
if k>n:
self.trigger1()
else:
l=0;
while (l<k):
best_now=numpy.asarray(numpy.where(v1==max(v1)),int)[0,0]
v2[l]=best_now;
v1[best_now]=0
'v1=numpy.delete(v1, best_now)'
'print l,v2;'
l=l+1;
return v2
def trigger1(self):
tkMessageBox.showwarning('Wrong value','Select the correct value')
var1=numpy.asarray(numpy.random.randint(0,100,10));
var2=var1
var3=numpy.asarray([1,2,3,3,3,3,3,4,5,6,7,8,9])
elite=kbest().val_report(3, var1);
print elite
print var2
Формат вашего кода. –
Здесь много ненужного материала. Я надеюсь, что кто-то еще ответит на ваш вопрос, но многие люди (например, я) не собираются читать что-то, что имеет ненужную сложность, такую как код GUI, который не имеет никакого отношения к вашему вопросу или прокомментировал строки. Кодирование в соответствии с обычными стандартами Python также сделает это более полезным. См. [PEP 8] (http://www.python.org/dev/peps/pep-0008/). –
sorted (v1) [- k:] – yurib