【问题标题】:Rearrange numpy vector according to mapping rule根据映射规则重新排列numpy向量
【发布时间】:2016-07-10 15:52:10
【问题描述】:

我有一个带有 0 和 1 的向量。我想要一个带有重新排列值的新向量,而我有另一个带有映射规则的向量:

例子:

input: 1,0,0,1
rule: 0,3,2,1
after mapping:1,1,0,0

映射向量为每个索引确定可以在新向量中的哪个索引处找到值。

我该怎么做?

【问题讨论】:

  • 我不懂映射规则。您是说 0、3、1、2 吗?
  • a=np.asarray([1,0,0,1]); b=np.asarray([0,3,1,2]); a[b]
  • @Bort 这不符合 OP 的要求:请参阅我的回答。

标签: python numpy


【解决方案1】:

假设a 是原始数组,b 是映射规则。由于映射规则说“可以在 new 向量中的哪个索引处找到值”,因此您需要计算 a[c] 其中cinverse排列b。逆排列的计算是addressed in detail elsewhere,所以我将从那里选择一个解决方案:

c = np.zeros(b.size, b.dtype)
c[b] = np.arange(b.size) 
new_array = a[c]

示例:如果 a 是 [7, 8, 9] 而 b 是 [1, 2, 0],则返回 [9, 7, 8]。让我们检查一下:

  • 7 去了位置 1,
  • 8 去了位置 2,
  • 9 到位置 0

结果是正确的。


如果您按照Bort 的建议执行a[b],则结果将是[8, 9, 7],这是不同的。事实上,在这个版本中,b 的条目说明了原始数组中数字来自的位置:

  • 8 来自位置 1
  • 9 来自位置 2
  • 7 来自位置 0

为了混淆问题,您给出的示例是一个等于其逆的排列,因此失去了区别。

【讨论】:

    猜你喜欢
    • 2020-10-29
    • 2013-08-26
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多