【问题标题】:How to sort array by array of indices? [duplicate]如何按索引数组对数组进行排序? [复制]
【发布时间】:2021-12-23 07:59:31
【问题描述】:

我有一个简单的数字数组arr = [4, 2, 7, 5]

我用它做了一些计算,交换了一些值,现在我有两个数组:

数组本身arr = [4, 7, 2, 5]

还有这个数组的索引数组indices = [0, 2, 1, 3]

每个数字表示数组的值所在的位置(索引为 1 的值与索引为 2 的值交换)。

拥有这两个数组,我如何将arr 恢复到它的初始状态?这样arr[1] 将与arr[2] 交换,如indices 数组所示。

附:我有 numpy 可用于简化数组。

【问题讨论】:

  • 预期输出是什么,请明确
  • 预期输出是原始未更改且未排序的数组
  • 您是否尝试使用索引从 [4, 7, 2, 5] 转到 [4, 2, 7, 5]
  • @Chris 让我检查一下
  • np.array([4, 7, 2, 5])[indices] -> array([4, 2, 7, 5]) 使用 Numpy 索引。

标签: python arrays numpy indexing


【解决方案1】:
arr = [4,7,2,5]
indices = [0,2,1,3]
arr2 = [arr[i] for i in indices]
print(arr2)

【讨论】:

  • 这有时不能给出正确的答案。输入:indices = [2, 1, 4, 3, 0]arr=[3, 1, 4, 1, 3] 给我[4 1 3 1 3] 但应该给[3 1 3 1 4]
  • @developer1 -- 问题可能是您对索引的定义与通常的意思不同。通常的含义是此答案中的列表理解。你有不同的意思吗?
  • @developer1 我不明白它会是什么[3,1,3,1,4]。您是不是碰巧两次对索引进行重新排列?还是颠倒顺序?因为这样做两次或颠倒数组的顺序,似乎给出了您期望的输出。您能否展示更多关于数组和索引的示例以及您期望从它们获得的相应输出?
  • 使用[x for _, x in sorted(zip(Y, X))] 中描述的这种方法进行排序stackoverflow.com/questions/6618515/… 确实解决了克里斯在cmets 中提供的正确问题
  • 对不起,可能你理解错了,或者我解释的不正确,但是indices = [2, 1, 4, 3, 0]arr=[3, 1, 4, 1, 3]应该排序,所以indices最后会是[0,1,2,3,4]arr相应地。
猜你喜欢
  • 1970-01-01
  • 2022-10-14
  • 2011-12-17
  • 2018-09-22
  • 1970-01-01
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 2011-09-25
相关资源
最近更新 更多