收到错误消息:ufunc'subtract'不包含签名匹配类型为dtype('<u32')dtype('<u32')=“” dtype('<u32')=“”

时间:2019-02-20 14:49:29

标签: python numpy

=”“

我收到了我在机器学习项目的标题中所述的错误。我正在追踪guide on the internet。这是我遇到错误的部分:

def euclideanDistance(instance1, instance2, length):
    distance = 0
    for x in range(length):
        distance += pow((instance1[x] - instance2[x]), 2)
    return math.sqrt(distance)

def getNeighbors(trainingSet, testInstance, k):
    distances = []
    length = len(testInstance)-1
    for x in range(len(trainingSet)):
        dist = euclideanDistance(testInstance, trainingSet[x], length)
        distances.append((trainingSet[x], dist))
    distances.sort(key=operator.itemgetter(1))
    neighbors = []
    for x in range(k):
        neighbors.append(distances[x][0])
    return neighbors

neighbors = getNeighbors(training_feature_list, test_feature_list, 3)
print(neighbors)

我已经在互联网上四处寻找这个问题,并注意到之前有很多人问过这个问题,但是据我了解,问题出在试图对不同类型的变量使用ufunc。但是我的training_feature_list和test_feature_list相似。

火车组像[['5.1''0.2'] ['4.9''0.2'] ...(30行)

测试集类似于[['4.8''0.2'] ['5.4''0.4'] ...(20行)。

如果有人能简要解释为什么出现此问题(因为我可能不太了解)以及如何解决它,我将感到非常高兴。

预先感谢

1 个答案:

答案 0 :(得分:1)

如果您的列表确实看起来像[[''5.1''0.2'] ['4.9''0.2'] ...,则可能是由于您试图从另一个字符串中减去一个字符串而导致的“ 5.1”是一个字符串,而5.1(您可能希望使用)是一个浮点数。

如果不是这种情况,那么可能是导致错误的另一个可能原因(尽管我希望有另一个原因)是您传递的是列表而不是numpy数组,因此最好进行计算,因为您不能仅仅减去一个列表,另一个列表。