我正在尝试在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吗?你看到任何笨拙的伎俩,我错过了吗?
注意:我已经搜索过,有几个帖子有一个接近的问题,但没有像我需要的那样。
答案 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]])