我写了这个函数(后来用于在遗传算法中选择精英物种)来从n中选择k个最佳值,其中并非所有n个值都是唯一的。首先,我非常感谢对代码的任何评论,但我主要关注的事实是,由于某种原因,第二个向量(var2)中的值也被设置为0.如果不是数组,我使用list,this没有发生,但当然我想使用数组而不是列表!所以非常欢迎任何评论
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
答案 0 :(得分:4)
您只是给var1
别名var2
。他们都指向相同的内容。
您必须将内容复制到新对象。
In [1]: x = numpy.arange(5)
In [2]: x
Out[2]: array([0, 1, 2, 3, 4])
In [3]: y = x.copy()
In [4]: x[:] = 0
In [5]: x
Out[5]: array([0, 0, 0, 0, 0])
In [6]: y
Out[6]: array([0, 1, 2, 3, 4])