数组的值设置为0

时间:2011-12-16 00:10:06

标签: python numpy

我写了这个函数(后来用于在遗传算法中选择精英物种)来从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

1 个答案:

答案 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])