快速替换numpy值

时间:2013-12-26 15:51:37

标签: python numpy multidimensional-array

我正在尝试在numpy数组中替换多个值。

基本上,我有两个数组:zones.shape = 1289; indices.shape =(1289 * 1289,2)

我想将“indices”的值替换为“zones的索引

这里有数组:

In [223]: indices
Out[223]: 
array([[   1,    1],
   [   1,    2],
   [   1,    3],
   ..., 
   [1289, 1287],
   [1289, 1288],
   [1289, 1289]])

zones = np.unique(indices)

在这种情况下,指数会回应一系列,但情况并非如此。

目前,我发现的所有内容都是:

for zone_ in range(len(zones)):
         indices[indices == zones[zone_]] = zone_

这需要1300行的时间,这个数字肯定会更大。我应该使用dict吗?你看到任何笨拙的伎俩,我错过了吗?

注意:我已经搜索过,有几个帖子有一个接近的问题,但没有像我需要的那样。

1 个答案:

答案 0 :(得分:2)

如果我理解了这个问题,你可以通过返回“反向”和唯一元素,从np.unique得到你想要的东西。反转是扁平的,因此您必须将其重新整形为indices的形状。例如,

In [14]: indices
Out[14]: 
array([[ 1,  1],
       [ 1,  2],
       [ 1,  3],
       [ 5,  1],
       [ 5,  3],
       [ 5, 10],
       [13, 10],
       [13, 13],
       [13, 14]])

In [15]: zones, inv = unique(indices, return_inverse=True)

In [16]: zones
Out[16]: array([ 1,  2,  3,  5, 10, 13, 14])

In [17]: new_indices = inv.reshape(indices.shape)

In [18]: new_indices
Out[18]: 
array([[0, 0],
       [0, 1],
       [0, 2],
       [3, 0],
       [3, 2],
       [3, 4],
       [5, 4],
       [5, 5],
       [5, 6]])