2016-03-08 71 views
0

我有一个numpy的阵列y这我想保留,但越来越被通过以下操作更换?原本ys是1,5,7和上述操作后np.unique(y)给出:0,1,2更换原始值

+1

复制'y2 = y.copy()' – Zero

回答

1

如已经陈述的,y2 = y只是使另一个参考底层numpy的阵列。就python而言,y2y难以区分。你甚至可以检查y2 is y将返回True和两个阵列有相同的id(内存位置)。正如在评论中指出,可以使y2一个复制y不共享相同的存储地址:

y2 = y.copy() 

或者(也许更高效的),你可以依靠内置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]) 
1

这是因为当你做y2[y2==val]=i你操作原始排列Y。除非你明确地将它指定为@John Galt提到的,否则Python不会复制np数组。 而不是做y2 = yy2 = y.copy()。这将创建一个y的副本,您将操作副本而不是原始副本。