Python 获取错误:ufunc';减去';未包含具有签名匹配类型dtype(';<;U32';)dtype(';<;U32';)dtype(';<;U32';)的循环

Python 获取错误:ufunc';减去';未包含具有签名匹配类型dtype(';<;U32';)dtype(';<;U32';)dtype(';<;U32';)的循环,python,numpy,Python,Numpy,我得到了我在机器学习项目标题中指出的错误。我正在跟踪一个消息。以下是我得到错误的部分: 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(t

我得到了我在机器学习项目标题中指出的错误。我正在跟踪一个消息。以下是我得到错误的部分:

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时出现了这个问题。但是我的训练功能列表和测试功能列表是相似的

列车组像['5.1''0.2']['4.9''0.2']…(30排)

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

如果有人能简单地解释为什么会出现这个问题(因为我可能不太了解它)以及如何解决它,我会非常高兴


提前感谢

如果您的列表看起来真的像[[5.1”“0.2'][4.9”“0.2']…,那么错误可能是因为您试图从一个字符串中减去另一个字符串,因为“5.1”是一个字符串,而5.1(您可能需要)是一个浮点数


如果不是这样的话,那么导致错误的另一个可能原因(尽管我希望是另一个原因)是您传递的是列表而不是numpy数组,您最好在计算时这样做,因为您不能从一个列表中减去另一个列表。

如果您的列表看起来真的像['5.1''0.2']['4.9''0.2']…,那么错误可能是因为您试图从一个字符串中减去另一个字符串,因为“5.1”是一个字符串,而5.1(您可能需要)是一个浮点数


如果不是这种情况,则是错误的另一个可能原因(尽管我希望是另一个原因)你传递的是列表而不是numpy数组,你最好在计算时这样做,因为你不能从一个列表中减去另一个列表。

我很确定它们都是numpy数组,所以不应该是第二种情况。如果是第1种情况,我如何确保我将numpy数组作为浮点而不是字符串处理?(因为据我所知,默认数据类型是numpy上的float)我发现了,是的,你从一开始就是对的。我把数组当作字符串来处理,因为当我第一次创建它们时,它们的每一行都有标签,所以它很可能被创建成字符串数组。使用x.astype拯救了我。第一种情况是因为你编写了列表的示例,如果它们是通过一些numpy计算得到的,那么它们会我们已经是浮点数了。我很确定它们都是numpy数组,所以不应该是第二种情况。如果是第1种情况,我如何确保将numpy数组作为浮点数而不是字符串处理?(因为我知道默认数据类型是numpy上的浮点数)我发现了,是的,你从一开始就是对的。我把数组当作字符串来处理,因为当我第一次创建它们时,它们的每一行都有标签,所以它很可能被创建成字符串数组。使用x.astype拯救了我。第一种情况是因为你编写了列表的示例,如果它们是通过一些numpy计算得到的,那么它们会已经是浮子了。