Python:获取将字符串数组排序以匹配另一个字符串数组的索引

时间:2018-05-05 16:46:28

标签: python arrays numpy

我的问题是如何获取将对另一个数组进行排序的字符串数组的索引。

我有两个字符串数组:

A = np.array([ 'a', 'b', 'c', 'd' ])
B = np.array([ 'd', 'b', 'a', 'c' ])

我想获得将第二个排序的索引以匹配第一个。 我已经尝试了np.argsort函数给出第二个数组(在列表中转换)作为顺序,但它似乎没有工作。 任何帮助都会得到很大的帮助。 谢谢和最好的问候, Bradipo

  

编辑:

def sortedIndxs(arr):
    ???
     

这样

sortedIndxs([ 'd', 'b', 'a', 'c' ]) = [2,1,3,0]

2 个答案:

答案 0 :(得分:1)

通过numpy.searchsortednumpy.argsort

可以实现矢量化方法
import numpy as np

A = np.array(['a', 'b', 'c', 'd'])
B = np.array(['d', 'b', 'a', 'c'])

xsorted = np.argsort(B)
res = xsorted[np.searchsorted(B[xsorted], A)]

print(res)

[2 1 3 0]

答案 1 :(得分:0)

获取从任意排列到任意排列的转换规则的代码。

  • 创建indexTable:O(n)
  • 检查indexTable:O(n)
  • 总计:O(n)
A = [ 'a', 'b', 'c', 'd' ]
B = [ 'd', 'b', 'a', 'c' ]

indexTable = {k: v for v, k in enumerate(B)}
// {'d': 0, 'b': 1, 'a': 2, 'c': 3}

result = [indexTable[k] for k in A]
// [2, 1, 3, 0]