题目
题目链接
复合超向量是一种将多个向量组合成一个向量的方法,其计算公式为:
\[composite\ hypervector = \sum_{i=1}^{n} w_i \times v_i
\]
其中,\(w_i\) 是权重,\(v_i\) 是向量。
在本题中,这是一个使用超维计算(HDC)的任务,需要通过以下步骤处理数据:
- 为每个特征创建两个基本超向量:
- 一个表示特征名称
- 一个表示特征值
在创建过程中,需要使用随机种子来确保每次运行代码时生成的超向量是相同的。
- 使用绑定操作(bind)组合特征名称和值的超向量
本题使用了点积操作来实现绑定操作,即:
\[hv_1 \cdot hv_2 = \sum_{i=1}^{n} w_i \times v_i
\]
实际上,在绑定操作中,更常使用的是异或操作,具体实现方式交由读者自行探索。
3. 使用捆绑操作(bundle)将所有特征的超向量组合成一个复合超向量
本题的捆绑操作使用了求和操作,即:
\[\sum_{i=1}^{n} hv_i
\]
然后对结果进行符号化,即:
标准代码如下
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))