如何 map/hash 一个元组到指定范围内的值?

How can I map/hash a tuple to a value within a specified range?

我正在 tensorflow 中创建一个稀疏张量,它大约是 4,000,000 X 56,000,000。 56M 列是特征列的大约 10,600 个可能值之间的交互变量,也就是所有值的组合。

Tensorflow 的稀疏张量采用一个索引参数,它是列表的列表,其中每个子列表 [x, y] 表示稀疏张量中值的行和列。

我有交互变量的组合:

combos = []
grouped_feature = df.groupby('feature')
for name, group in grouped_feature:
    combos.append([*combinations(group.feature.unique(), 2)])

这给了我一个元组列表的列表。每个子列表中的元组对应于我的稀疏张量

中应该为1的组合

那我运行:

indices = []
for i in range(len(combos)):
    for j in range(len(combos[i])):
        indices.append([i, hash(combos[i][j])])

要获得正确的列表列表格式,但我需要更改散列函数以将每个组合映射到 56M 值之一。我怎样才能做到这一点?或者有更好的方法吗?我在 tensorflow 中找不到用于填充稀疏张量的内置 method/function

您可以使用散列 mod 您要映射到的范围内的值的数量。

例如

NUM_VALUES = 56 * 10**6
indices = []
for i in range(len(combos)):
    for j in range(len(combos[i])):
        indices.append([i, hash(combos[i][j]) % NUM_VALUES])