复合超向量是一种将多个向量组合成一个向量的方法,其计算公式为:
其中, 是权重,
是向量。
在本题中,这是一个使用超维计算(HDC)的任务,需要通过以下步骤处理数据:
- 为每个特征创建两个基本超向量:
- 一个表示特征名称
- 一个表示特征值 在创建过程中,需要使用随机种子来确保每次运行代码时生成的超向量是相同的。
- 使用绑定操作(bind)组合特征名称和值的超向量 本题使用了点积操作来实现绑定操作,即:
实际上,在绑定操作中,更常使用的是异或操作,具体实现方式交由读者自行探索。 3. 使用捆绑操作(bundle)将所有特征的超向量组合成一个复合超向量 本题的捆绑操作使用了求和操作,即:
然后对结果进行符号化,即:
标准代码如下
def create_hv(dim):
return np.random.choice([-1, 1], dim)
def create_col_hvs(dim, seed):
np.random.seed(seed)
return create_hv(dim), create_hv(dim)
def bind(hv1, hv2):
return hv1 * hv2
def bundle(hvs, dim):
bundled = np.sum(list(hvs.values()), axis=0)
return sign(bundled)
def sign(vector, threshold=0.01):
return np.array([1 if v >= 0 else -1 for v in vector])
def create_row_hv(row, dim, random_seeds):
row_hvs = {col: bind(*create_col_hvs(dim, random_seeds[col])) for col in row.keys()}
return bundle(row_hvs, dim)
if __name__ == "__main__":
row = eval(input())
dim = int(input())
random_seeds = eval(input())
print(create_row_hv(row, dim, random_seeds))