Euclidean Distance(欧氏距离):如何用循环函数批量计算样本距离
代码笔误修正
你原来计算第一条距离的代码中data.iloc[0,1+1]属于笔误,按照你给出的第一条距离结果0.156433反推,应该取索引为1的NORMALIZED_SAT字段,否则会误取ACCEPT_NUM列导致计算结果错误。
方法1:for循环实现(符合你要求的重复计算逻辑)
如果需要沿用你原本的计算逻辑用循环完成所有行的赋值,代码如下:
import numpy as np # 遍历所有24行计算,会覆盖已计算的第0行结果 for i in range(len(data)): distance2 = (data.iloc[i, 0] - 0.5) ** 2 + (data.iloc[i, 1] - 0.5) ** 2 distance = np.sqrt(distance2) data.iloc[i, 3] = distance
如果只想计算剩余23条、跳过已经算好的第0行,把循环起始值改为1即可:
# 仅计算第1到第23行 for i in range(1, len(data)): distance2 = (data.iloc[i, 0] - 0.5) ** 2 + (data.iloc[i, 1] - 0.5) ** 2 distance = np.sqrt(distance2) data.iloc[i, 3] = distance
方法2:向量化运算(更推荐,无需手动写循环)
如果你使用的是pandas DataFrame结构,直接用向量化操作一行就能完成所有距离计算,效率更高且不会出现索引写错的问题:
data['distance'] = np.sqrt((data['NORMALIZED_GPA'] - 0.5) ** 2 + (data['NORMALIZED_SAT'] - 0.5) ** 2)
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

