复合超向量是一种将多个向量组合成一个向量的方法,其计算公式为:

其中, 是权重, 是向量。 在本题中,这是一个使用超维计算(HDC)的任务,需要通过以下步骤处理数据:

  1. 为每个特征创建两个基本超向量:
  • 一个表示特征名称
  • 一个表示特征值 在创建过程中,需要使用随机种子来确保每次运行代码时生成的超向量是相同的。
  1. 使用绑定操作(bind)组合特征名称和值的超向量 本题使用了点积操作来实现绑定操作,即:

实际上,在绑定操作中,更常使用的是异或操作,具体实现方式交由读者自行探索。 3. 使用捆绑操作(bundle)将所有特征的超向量组合成一个复合超向量 本题的捆绑操作使用了求和操作,即:

然后对结果进行符号化,即: alt

标准代码如下

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))