我有两个相等长度的字符串,包含1和0.每个字符串长128位,我想计算它们之间的汉明距离.我能做到这一点的最佳方式是什么?
例如a ='1000001'和b ='1110001' - > dist =汉明(a,b);
我有一个文档TermMatrix,如下所示:
artikel naam product personeel loon verlof
doc 1 1 1 2 1 0 0
doc 2 1 1 1 0 0 0
doc 3 0 0 1 1 2 1
doc 4 0 0 0 1 1 1
Run Code Online (Sandbox Code Playgroud)
在包中tm,可以计算两个文档之间的汉明距离。但现在我想对汉明距离小于 3 的所有文档进行聚类。所以这里我希望聚类 1 是文档 1 和 2,聚类 2 是文档 3 和 4。有可能这样做吗?
r cluster-analysis matrix hamming-distance term-document-matrix
我想知道如何按组计算不匹配的情况.
让我们想象这是我的数据:
sek = rbind(c(1, 'a', 'a', 'a'),
c(1, 'a', 'a', 'a'),
c(2, 'b', 'b', 'b'),
c(2, 'c', 'b', 'b'))
colnames(sek) <- c('Group', paste('t', 1:3, sep = ''))
Run Code Online (Sandbox Code Playgroud)
数据看起来像这样
Group t1 t2 t3
[1,] "1" "a" "a" "a"
[2,] "1" "a" "a" "a"
[3,] "2" "b" "b" "b"
[4,] "2" "c" "b" "b"
Run Code Online (Sandbox Code Playgroud)
为了获得类似的东西
Group 1 : 0
Group 2 : 1
Run Code Online (Sandbox Code Playgroud)
使用stringdist库来计算它是很奇怪的.
就像是
seqdistgroupStr = function(x) stringdistmatrix(x, method = 'hamming')
sek %>%
as.data.frame() …Run Code Online (Sandbox Code Playgroud) 除了海明距离外,我得到了一切.我一直得到错误"int()无法使用显式基础转换非字符串"
这是我的代码:
def int2bin(n):
if n:
bits = []
while n:
n,remainder = divmod(n, 2)
bits.insert(0, remainder)
return bits
else: return [0]
def bin2gray(bits):
return bits[:1] + [i ^ ishift for i, ishift in zip(bits[:-1], bits[1:])]
def hamming(a,b):
assert len(a) == len(b)
count,z = 0,int(a,2)^int(b,2)
while z:
count += 1
z &= z-1
return count
def main():
a = int(input("Positive integer 1: "))
b = int(input("Positive integer 2: "))
print('int:%2i binary:%12r BRGC:%12r' %
( a,
int2bin(a),
bin2gray(int2bin(a))
))
print('int:%2i binary:%12r …Run Code Online (Sandbox Code Playgroud) 我有一系列DNA序列,如:
AA
TA
AC
CC
我搜索一个更快的方法来计算所有序列对之间的汉明距离(可能通过排序......),然后是天真的方法(O(N ^ 2))
For motif1 in array
For motif2 in array
calculate Hamming_Distance(motif1 , motif2)
end
end
Run Code Online (Sandbox Code Playgroud)
我需要具有汉明距离= 1的对的序列
我正在使用汉明距离来计算由来自 opencv的BRISK 描述符获得的两个关键点描述符之间的差异。我遵循opencv 文档的建议并在计算距离时使用cv2.NORM_HAMMING如下:
dist_opencv = cv2.norm(des_1,des_2,cv2.NORM_HAMMING)
Run Code Online (Sandbox Code Playgroud)
它在两个描述符中提供值 87.0。但是,根据汉明距离描述,这是不正确的。我遵循了两种替代方法(在 python 中实现)来验证这一点:
dist_alt_app_1 = len(np.where(np.abs(des_1 - des_2)>0)[0])
dist_alt_app_2 = sum(el1 != el2 for el1, el2 in zip(des_1, des_2))
Run Code Online (Sandbox Code Playgroud)
dist_alt_app_1 和 dist_alt_app_2 提供的值 43 与从 opencv 获得的 87.0 不相似。进行了一些搜索以了解这种差异的原因。但是没有找到解释和澄清。
任何人都可以为这种差异提供解释吗?提前致谢。
============== 在这里添加一个例子(使问题更笼统):
des_1 = [180 25 195 96 96 88 0 0]
des_2 = [244 27 195 96 96 192 0 0]
Run Code Online (Sandbox Code Playgroud)
对于上述两个描述符,dist_opencv = 5.0 和其他(dist_alt_app_1 和 dist_alt_app_2)给出 …
我正在尝试计算已计算的两个描述符之间的距离(欧几里德或汉明).问题是我不想使用匹配器,我只想计算两个描述符之间的距离.我正在使用OpenCV 2.4.9,并且我的遗留描述符存储在Mat类型中:
Mat descriptors1;
Mat descriptors2;
Run Code Online (Sandbox Code Playgroud)
现在我只想计算描述符1的row1和描述符2的row1之间的距离(最好是因为我使用二进制描述符的汉明距离)(例如).
我试过使用bitwise_xor()函数,但后来我没有一个有效的方法来做bitcount.没有函数来计算两个阵列之间的汉明距离?
我注意到我对OpenCV很新,但我很感激任何帮助.谢谢
c++ opencv euclidean-distance hamming-distance feature-descriptor
我正在尝试编写一个匹配ORB功能的函数.我没有使用默认匹配器(bfmatcher,flann matcher),因为我只想在图像中使用其他图像中的特征匹配特征.
我看到ORS描述符是一个二进制数组.
我的问题是如何匹配2个特征,即如何找到2个描述符之间的汉明距离?
ORB描述符:
descriptor1 =[34, 200, 96, 158, 75, 208, 158, 230, 151, 85, 192, 131, 40, 142, 54, 64, 75, 251, 147, 195, 78, 11, 62, 245, 49, 32, 154, 59, 21, 28, 52, 222]
descriptor2 =[128, 129, 2, 129, 196, 2, 168, 101, 60, 35, 83, 18, 12, 10, 104, 73, 122, 13, 2, 176, 114, 188, 1, 198, 12, 0, 154, 68, 5, 8, 177, 128]
Run Code Online (Sandbox Code Playgroud)
谢谢.
我有大约 1M 的二进制 numpy 数组,我需要它们之间的汉明距离才能找到 k-最近邻,我得到的最快方法是使用 cdist,返回一个带距离的浮点矩阵。
由于我没有足够的内存来获得 1Mx1M 的浮点矩阵,所以我当时正在做一个元素,如下所示:
from scipy.spatial Import distance
Hamming_Distance = distance.cdist(array1,all_array,'hamming')
Run Code Online (Sandbox Code Playgroud)
问题是每个 Hamming_Distance 需要 2-3 秒,1m 文档需要一个永恒的时间(我需要将它用于不同的 k)。
有什么最快的方法吗?
我正在考虑多处理或在 C 上进行,但我在理解它如何在 python 上进行多处理时遇到了一些麻烦,我不知道如何将 C 代码与 Python 代码混合。
我试图对Java中的两个64位Long变量执行XOR操作。问题是,当我在变量中添加超过16位时,它将失败。
例如,这有效并返回7:
Long h1 = Long.parseLong("1100001101001101");
Long h2 = Long.parseLong("1100001101000001");
System.out.println(Long.bitCount(h1 ^ h2));
Run Code Online (Sandbox Code Playgroud)
如果我将h1和h2的值增加到:
Long h1 = Long.parseLong("11000110000110100110101101001101");
Long h2 = Long.parseLong("11000011100001101001101101000001");
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
例外在线程“主” java.lang.NumberFormatException:对于输入字符串: “11000110000110100110101101001101”
在
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
在java.lang.Long.parseLong(Long.java:592)
在java.lang.Long.parseLong(Long.java:631)
如果我加倍(64位要计算的),则相同:
Long h1 = Long.parseLong("1100011100011000011010011010110100110110000110100110101101001101");
Long h2 = Long.parseLong("1100001110001100001101001101011010011011100001101001101101000001");
Run Code Online (Sandbox Code Playgroud)
关于为什么为什么失败超过16位有帮助吗?
我是 Python 新手,我需要找到两个字符串之间的汉明距离:
chaine1 = 6fb17381822a6ca9b02153d031d5d3da
chaine2 = a242eace2c57f7a16e8e872ed2f2287d
Run Code Online (Sandbox Code Playgroud)
XOR 功能不行,我在网上搜索也不是很成功。
我试图修改我在网上找到的东西,但有一些无效的语法......:
assert len (chaine1) == len(chaine2)
return sum(chaine1 != chaine2 for chaine1, chaine2 in zip(chaine1, chaine2))
if __name__=="__main__":
chaine1 = hashlib.md5("chaine1".encode()).hexdigest()
chaine2 = hashlib.md5("chaine2".encode()).hexdigest()
print hamming_distance(chaine1, chaine2)
Run Code Online (Sandbox Code Playgroud)
关于我如何进行的任何想法?谢谢!