我有一个如下数组:
strArray = np.array(['ab','abc','ab','bca','ab','m-2','bca'])
对于此示例,这是一个包含短字符串的短数组,但是请考虑到,字符串和数组实际上要更长一些,并且要重复很多,并且占用太多空间。
是否有一个函数接收此数组并输出两个数组,一个是唯一字符串的字典,一个是strArray
但具有整数标识符:
keyArray, intArray = some_function(strArray)
print(keyArray) # output: { 0:'ab', 1:'abc', 2:'bca', 3:'m-2' }
print(intArray) # output: [ 0, 1, 0, 2, 0, 3, 2 ]
或者,我只选择intArray
,这样我就可以使用减小尺寸的数组,可以更轻松地使用它—原始字符串会很有用,但不会牺牲尺寸/速度/ ease。
答案 0 :(得分:3)
我们可以将np.unique
与return_inverse
arg一起使用-
In [16]: unq,tags = np.unique(strArray, return_inverse=True)
In [17]: dict(zip(range(len(unq)),unq))
Out[17]: {0: 'ab', 1: 'abc', 2: 'bca', 3: 'm-2'}
In [18]: tags
Out[18]: array([0, 1, 0, 2, 0, 3, 2])