【发布时间】:2017-07-03 02:52:42
【问题描述】:
假设我有一个排序的 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 的数组。例如,返回数组的第一个元素是arr2 在arr 中的第一个元素的索引。
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 会更好,通过“非平凡操作”进行处理
-
我使用的非平凡操作将保留唯一性是的,但保留原始索引无济于事,因为该操作不会保留顺序。
-
对添加的索引轴也进行相同的重新排序操作,之后索引仍然标记arr转换后元素的原始位置,便于在添加的索引轴上排序以恢复原始顺序
-
“如果 arr2 的长度与原始数组的长度不同,它也应该可以工作”-停止改变我们的问题。
标签: python arrays sorting numpy multidimensional-array