ValueError:设置具有序列numpy的数组元素

时间:2018-07-16 01:41:14

标签: python numpy valueerror

这是我的代码:

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:设置具有序列的数组元素

1 个答案:

答案 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)