Matlab到Python的Hamming距离

2024-04-20 02:29:54 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我用k-NN方法对两个文档做汉明距离。我试图将Matlab代码翻译成Python,但是我已经看了几个小时了,不知道是什么导致了这个错误。在

Matlab代码:

function [ Dist ] = hamming_distance( X,Xtrain )
% Function calculates Hamming distances of elements in set X from elements in set Xtrain. Distances of objects are returned as matrix Dist
% X - set of objects we are comparing N1xD
% Xtrain - set of objects to which X objects are compared N2xD
% Dist - matrix of distances between X and Xtrain objects N1xN2
% N1 - number of elements in X
% N2 - number of elements in Xtrain
% D - number of features (key words)

N1 = size(X,1);
N2 = size(Xtrain,1);
Dist = zeros(N1,N2);
D1 = size(X,2);
for i=1:N1
    for j=1:N2
        temp_matrix = xor(X(i,1:D1),Xtrain(j,1:D1));
        Dist(i,j) = sum(temp_matrix);
    end
end
end

到目前为止,我用Python写的是:

^{pr2}$

错误似乎出现在Python代码的xor部分。我什么都不想改变,但我不明白。我检查了logical_xor函数,似乎我有正确的函数输入。我不明白错误是从哪里来的。可能是因为不同形状的矩阵?当我要调整它们的大小时,我很困惑,我应该把X和X的train改成数组吗?我试过一次,但没用。在

错误:

Traceback (most recent call last):
  File "C:\...\test.py", line 90, in test_hamming_distance
    out = hamming_distance(data['X'], data['X_train'])
  File "C:\...\content.py", line 28, in hamming_distance
    temp_matrix = np.logical_xor(X[i,1:D1], X_train[j, 1:D1])
  File "C:\...\Anaconda3\lib\site-packages\scipy\sparse\base.py", line 559, in __getattr__
    raise AttributeError(attr + " not found")
AttributeError: logical_xor not found

我不能改变测试.py,只有内容.py. 测试.py应该可以正常工作,所以我肯定我的功能有问题。任何帮助都将不胜感激!在

我在我的档案上有:

import numpy as np

写numpy而不是np并没有改变任何东西。我得到一个错误'numpy wasn't defined'。在


Tags: ofinpyobjectsdist错误elementsmatrix
1条回答
网友
1楼 · 发布于 2024-04-20 02:29:54

这不起作用的原因是X或{}都是scipy稀疏矩阵。Scipy稀疏矩阵还不支持逻辑运算,尽管这方面的工作是in-progress。在

当您调用numpy函数时,这个错误出现在scipy而不是numpy中的原因是logical_xor是numpy ufunc或“通用函数”。打算与numpy ufuncs交互的Python类可以覆盖ufuncs的行为,scipy稀疏矩阵这样做是为了避免调用不支持的操作,这些操作会将数组转换为密集数组,并且可能会占用所有内存。在

您需要使用例如X.toarray()将其转换为密集数组。{{{6}如果你想用一个大的cd6}来处理它,那么你应该使用cd6}来管理内存。在

编辑:scipy稀疏矩阵不是ndarray的子类。在

相关问题 更多 >