这是我的代码:
X:包含测试数据的形状为numpy的数组(num_test,D)
dists:形状为numpy的数组(num_test,num_train),其中dists [i,j]是第i个测试点与第j个训练点之间的欧几里得距离。
def compute_distances_two_loops(self, X):
num_test = X.shape[0]
num_train = self.X_train.shape[0]
dists = np.zeros((num_test, num_train))
print(num_test,num_train)
for i in range(num_test):
for j in range(num_train):
dists[i,j] = np.sqrt((np.pow(X[i],2) + np.pow(self.X_train[j],2))
return dists
我收到以下错误: ValueError:设置具有序列的数组元素
答案 0 :(得分:1)
您计算距离的公式是错误的。
尝试更改此行:
dists[i,j] = np.sqrt((np.pow(X[i],2) + np.pow(self.X_train[j],2))
对此:
dists[i,j] = np.sqrt(np.sum(np.pow(X[i] - self.X_train[j], 2)))
或者这个:
dists[i,j] = np.linalg.norm(X[i] - X_train[j])
或者也许用这个替换整个东西:
from scipy.spatial.distance import cdist
def compute_distances(self, X):
return cdist(X, X_train)