Python迭代numpy ndarray时报invalid index to scalar variable错误如何解决
错误产生原因
- 你定义的
centroids是形状为(2,)的一维NumPy数组,遍历centroids得到的变量i是0.0、1.0这类单个浮点标量,如果你在代码中尝试对标量i做索引操作(比如误写为print(i[0])、或者取i[1]访问坐标值),就会触发invalid index to scalar variable报错。 - 质心数组的定义不符合二维点计算的使用逻辑:
ndArr中存储的是每个二维坐标点,对应的质心也应该是二维坐标格式,centroids需要定义为形状为(质心数量, 2)的二维数组,而非当前的一维数组。 - 函数内部你传入了
data参数却没有使用,直接调用全局变量ndArr,存在参数不生效的隐式问题。
解决方法
- 首先修正
centroids数组的定义,例如你要定义两个初始质心[0, 0]和[1, 1],可改为如下写法:
centroids = np.array([[0, 0], [1, 1]], dtype = float)
- 修正函数的迭代逻辑,优先使用传入的
data参数,遍历逻辑参考如下:
def performDistanceToCentroid(data, centroids): # 遍历每个质心 for centroid in centroids: # 遍历每个数据点 for point in data: # 示例:打印当前点的x坐标 print(point[0]) # 如果需要计算点到质心的欧氏距离,可使用下方注释的代码 # distance = np.sqrt(np.sum((point - centroid) ** 2))
修改后调用performDistanceToCentroid(ndArr, centroids)就不会再触发该报错。
内容的提问来源于stack exchange,提问作者Diego C
相关产品推荐
相关产品推荐

