好的,我用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'
。在
这不起作用的原因是}都是scipy稀疏矩阵。Scipy稀疏矩阵还不支持逻辑运算,尽管这方面的工作是in-progress。在
X
或{当您调用numpy函数时,这个错误出现在scipy而不是numpy中的原因是
logical_xor
是numpy ufunc或“通用函数”。打算与numpy ufuncs交互的Python类可以覆盖ufuncs的行为,scipy稀疏矩阵这样做是为了避免调用不支持的操作,这些操作会将数组转换为密集数组,并且可能会占用所有内存。在您需要使用例如
X.toarray()
将其转换为密集数组。{{{6}如果你想用一个大的cd6}来处理它,那么你应该使用cd6}来管理内存。在编辑:scipy稀疏矩阵不是ndarray的子类。在
相关问题 更多 >
编程相关推荐