试图通过示例 python 代码来理解 LSH

trying to understand LSH through the sample python code

我学习的简洁 python 代码是 here

问题 A @ 第 8 行

为了"get_signature"

,我不太理解“res = res << 1”的语法含义

问题 B @ 第 49 行(由我自己通过另一个 Q&A 解决)

"xor = r1^r2" 对我来说没有任何意义,作者后来尝试了 "(d-nna(vor)) ”计算"hash_sim"——(参考第50行)

问题 C @ 关于 hash_sim 一般

这个问题更多是关于LSH的理解,示例代码中的变量“d”(第38行)在做什么----后面用来计算hash_sim 第 50

问题 D @ 第 20 和 24 行 -- "&" 的语法

不仅在理解语法“num = num & (num-1)”时遇到问题,而且不确定 "nnz" 在上下文中正在做什么hash_sim 的差异性。当作者将 "xor" 应用到“nnz”时,这个问题可能与我的问题 (-b-) 有关,并且再次等式为“xor"(问题 b)对我来说很奇怪。

p.s.

我对 python 和 LSH 的理解都处于初级水平,我有点陷入了这个问题的循环中。感谢您花时间解决我的困惑以及代码

一个。这是左移:https://docs.python.org/2/reference/expressions.html#shifting-operations 它将位向左移动一位。

b。请注意,^ 不是 "to the power of",而是 Python 中的 "bitwise XOR"。

c。正如评论所述:它将 "number of bits per signature" 定义为 2**101024

d。这些行计算 numnum + 1 的按位与。 该函数的用途记录在上面的评论中: “# 获取二进制中‘1’的个数”