根据映射规则重新排列numpy向量

时间:2016-03-23 11:20:18

标签: python numpy

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

示例:

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

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

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我们说a是原始数组,b是映射规则。由于映射规则表示&#34; new 向量中的哪个索引可以找到值&#34;,因此您需要计算a[c],其中c是<排列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,这是不同的。实际上,在这个版本中,create(self, request)的条目表示原始数组中来自的位置:

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

为了混淆这个问题,你给出的例子是一个等于它的倒数的排列,所以区别就丢失了。