如何有效地将整数映射到多维数组中的URI?

时间:2018-12-13 16:33:52

标签: python dictionary hash encoding vectorization

我有一个看起来像这样的数组:

myarray = array([list(['string4', 'string2', 'string3']),list(['string1', 'string2', 'string4', 'string5']), list(['string1', 'string2', 'string4'])], dtype=object)

如何将单个字符串编码为整数?我有一个很大的数据集。我将如何最有效地做到这一点?我想要看起来像这样的东西:

myarrayencoded = [[4,2,3],[1,2,4,5],[1,2,4]]

注意:由于整数的位置很重要,因此我无法对任何内容进行排序。另外,每个子列表可能包含不同数量的字符串。

我非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以通过pd.factorize使用熊猫,熊猫内部使用哈希算法。

import pandas as pd
import numpy as np

myarray = np.array([list(['string4', 'string2', 'string3']),
                    list(['string1', 'string2', 'string4', 'string5']),
                    list(['string1', 'string2', 'string4'])], dtype=object)

flattened = np.concatenate(myarray)  # flatten array of lists
idx_split = np.array(list(map(len, myarray))).cumsum()[:-1]  # calculate split indices
factored = pd.factorize(flattened, sort=True)[0] + 1  # factorize, sort, start from 1

res = [i.tolist() for i in np.array_split(factored, idx_split)]  # return list of lists

print(res)

[[4, 2, 3], [1, 2, 4, 5], [1, 2, 4]]