首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >KNN算法:'int‘对象不可订阅

KNN算法:'int‘对象不可订阅
EN

Stack Overflow用户
提问于 2019-03-06 23:47:21
回答 1查看 189关注 0票数 0

我已经有一段时间没有使用python了,在寻找这个问题的解决方案时遇到了麻烦。我试着改变欧几里德距离函数的方程,但没有任何效果。也许我是盲目的,看不到问题的解决方案。

下面是我的代码:

代码语言:javascript
运行
复制
from math import sqrt
import csv
from random import shuffle
import numpy as np
import numpy
import matplotlib.pyplot as plt
import operator
import math


iris = datasets.load_iris() 

X = iris.data
y = iris.target



def euclideanDistance(id1, id2):
    for x in range(len(id1)-1):
        dist = np.sqrt(np.sum((int(id2[x]) - int(id1[x]))**2))
    return dist

data1 = [2, 2, 2, 'a']
data2 = [4, 4, 4, 'b']
distance = euclideanDistance(data1, data2)
print(distance)

def mykNN(X, y, x_):
    distance = []
    neighbour = []

    for i in range(len(X)):
        d = euclideanDistance(X[i], x_ )
        distance.append((X[i], d))
    distance.sort(key=operator.itemgetter(1))

    for r in range(k):
        options.append(distance[r][0])
    options = neighbour
    return neighbour

k=3

y_ = mykNN(X, y,k)
print(y_)

无论我如何改变我的函数,它都会出现这个错误。

代码语言:javascript
运行
复制
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-85-2a5bfc4a796d> in <module>
     42 k=3
     43 
---> 44 y_ = mykNN(X, y,k)
     45 print(y_)
     46 

<ipython-input-85-2a5bfc4a796d> in mykNN(X, y, x_)
     31 
     32     for i in range(len(X)):
---> 33         d = euclideanDistance(X[i], x_ )
     34         distance.append((X[i], d))
     35     distance.sort(key=operator.itemgetter(1))

<ipython-input-85-2a5bfc4a796d> in euclideanDistance(id1, id2)
     18 def euclideanDistance(id1, id2):
     19     for x in range(len(id1)-1):
---> 20         dist = np.sqrt(np.sum((int(id2[x]) - int(id1[x]))**2))
     21     return dist
     22 

TypeError: 'int' object is not subscriptable

我将感谢你的回复,因为这一直困扰着我。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-03-06 23:56:08

错误告诉您,在euclideanDistance()中,id1id2 (或两者)都是整数,因为这是您在该行上索引的两个标识符。要完成它,请执行以下操作:

调用您设置的k = 3

  • You

  • mykNN(X, y, k),这意味着在mykNN()中调用euclideanDistance(X[i], x_),这意味着在euclideanDistance()中,id2 == 3.

  • You尝试在指定的行上索引id2。无法对整数编制索引,因此出现异常。

所以这就是导致你错误的原因。因为我不确定你的代码到底在做什么,所以我不能直接推荐修复。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55027043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档