说我有一个排序numpy的数组:如何找到重新排列的numpy数组的索引?
arr = np.array([0.0, 0.0],
[0.5, 0.0],
[1.0, 0.0],
[0.0, 0.5],
[0.5, 0.5],
[1.0, 0.5],
[0.0, 1.0],
[0.5, 1.0],
[1.0, 1.0])
,并假设我做一个不平凡的操作就可以了,这样我有一个新的数组是一样的旧的,但在其他订单:
arr2 = np.array([0.5, 0.0],
[0.0, 0.0],
[0.0, 0.5],
[1.0, 0.0],
[0.5, 0.5],
[1.0, 0.5],
[0.0, 1.0],
[1.0, 1.0],
[0.5, 1.0])
现在的问题是:你如何得到arr2
的每个元素放置在arr
的指数。换句话说,我想要一个同时使用数组和数组的方法,它返回的数组的长度与arr2
相同,但是元素的索引为arr
。例如,返回数组的第一个元素将是arr
中arr2
的第一个元素的索引。
where_things_are(arr2, arr)
return : array([1, 0, 3, 2, 4, 5, 6, 8, 7])
像numpy这样的函数是否已经存在?
编辑:
我想:
np.array([np.where((arr == x).all(axis=1)) for x in arr2])
返回我想要的东西,但我的问题仍然成立:有没有这样做使用numpy的方法更有效的方法是什么?
EDIT2:
还应该工作,如果的arr2
长度不一样的原始数组的长度(例如,如果我去掉了一些元件从它)。因此它不是找到并反转排列,而是找出元素的位置。
“反”不会是唯一的 - 通过增加索引轴来增加原始ARR,通过“非平凡操作”进行操作 – f5r5e5d
我使用的非平凡操作将保留唯一性yes,但保留由于操作不能维持订单,所以原始指数将无济于事。 – fgoudra
也对所添加的索引轴应用相同的重新排序操作,之后索引仍然标记了arr的变换元素的原始位置,易于在所添加的索引轴上进行排序以恢复原始顺序 – f5r5e5d