替换原始值

时间:2016-03-08 06:57:08

标签: python arrays numpy

我有一个numpy数组y我试图保留,但是会被以下操作取代:

ys = np.unique(y)
y2 = y
for i,val in enumerate(ys):
    y2[y2==val]=i

为什么原来的numpy数组会被这个操作取代?最初ys为1,5,7,上述操作np.unique(y)给出:0,1,2

2 个答案:

答案 0 :(得分:1)

如前所述,y2 = y只是对底层的numpy数组进行了另一次引用。就python而言,y2y无法区分。您甚至可以检查y2 is y将返回True,并且两个阵列都具有相同的id(内存位置)。如评论中所述,您可以y2 y {em}副本 y2 = y.copy() ,但不共享相同的内存地址:

numpy.digitize

或者(也许更高效),您可以依赖内置的numpy函数。在这种情况下,我认为np.digitize(y, np.unique(y)) - 1 可能符合您的需求:

>>> a = np.array([0, 0, 1, 2, 1, 3, 4, 5, 0, 10, 30])
>>> b = np.digitize(a, np.unique(a)) - 1
>>> b
array([0, 0, 1, 2, 1, 3, 4, 5, 0, 6, 7])

似乎可以做到这一点。

        var form =this.up('form').getForm();

        Ext.getCmp('loadingImage').show();

        var gifNameViewString = getFileNameOnly(Ext.getCmp("fileUpload").getValue());

        var gifNameView = gifNameViewString.split(", ");

        for(var i=0; i<gifNameView.length; i++)
        {

            var filename = 'upload/'+gifNameView[i];

            if(form.isValid())
            {  
                form.submit({url: './fileuploading.php,                          
                    success: function(p,o)
                    { 
                        alert("success");


                    },
                    failure: function(fp,o)
                    { 
                        alert("fail");
                    }
                    });
            }

         }

答案 1 :(得分:1)

这是因为当你执行y2[y2==val]=i时,你正在操纵原始数组y。 Python不会复制np数组,除非你明确告诉它为@John Galt提到的。 而不是y2 = yy2 = y.copy()。这将创建y的副本,您将操纵副本而不是原始副本。