【发布时间】:2021-10-23 16:40:12
【问题描述】:
目前我正在阅读一篇关于图神经网络中量化的论文 (https://arxiv.org/pdf/2012.15823.pdf)。在第二页,他们讨论了如何逼近两个实值向量 a 和 b 的点积
现在我尝试在 Python 中实现这一点,但是当存在负数时,我得到的结果远非良好的近似值:
dataset = np.random.uniform(-1, 1, (500, 300))
dataset /= np.linalg.norm(dataset, axis=1, keepdims=True)
def sign(vector):
return 2* (vector > 0).astype(int) - 1
def rescaling(vector):
return (1 / vector.size) * np.sum(np.abs(vector))
def binary_product(vector_x, vector_y):
return (vector_x == vector_y).sum()
def calculate_approx(a, b):
alpha = rescaling(a)
beta = rescaling(b)
sign_a = sign(a)
sign_b = sign(b)
return binary_product(sign_a, sign_b) * alpha * beta
print(calculate_approx(dataset[0], dataset[1]))
print(dataset[0] @ dataset[1])
当我将数据集更改为仅具有高于 0 的值时,我确实得到了一个很好的近似值。
有人知道我做错了什么吗?
【问题讨论】:
标签: python vector linear-algebra dot-product