我有一个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
答案 0 :(得分:1)
如前所述,y2 = y
只是对底层的numpy数组进行了另一次引用。就python而言,y2
和y
无法区分。您甚至可以检查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 = y
做y2 = y.copy()
。这将创建y
的副本,您将操纵副本而不是原始副本。