汉明空间实值向量点积近似实现负数值场景偏差问题咨询
问题原因
你的实现错误出在binary_product函数的计算逻辑不符合二值符号向量点积的运算规则。
对于取值仅为±1的两个符号向量sign_a和sign_b,二者的点积计算规则为:
点积 = 符号相同的元素数量 - 符号不同的元素数量
你当前的binary_product仅统计了符号相同的元素数量,完全遗漏了符号不同的元素带来的负向贡献。当向量全为正值时,所有元素符号都是1,不会出现异号的情况,所以近似结果符合预期;一旦向量包含负值,异号元素的负向贡献被忽略,就会出现极大偏差。
修正方案
你可以选择任意一种方式修改binary_product函数:
- 直接调用numpy的点积运算,逻辑最简洁:
def binary_product(vector_x, vector_y): return np.dot(vector_x, vector_y)
- 如果你想基于符号匹配统计的逻辑实现,补充异号元素的计算即可:
def binary_product(vector_x, vector_y): same_count = (vector_x == vector_y).sum() diff_count = vector_x.size - same_count return same_count - diff_count
修正后重新运行代码,含负值向量的点积近似结果就会和真实值匹配。
内容的提问来源于stack exchange,提问作者Wouter
相关产品推荐
相关产品推荐

