如何 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])
我正在 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])