我正在使用IRIS数据集。我有两组数据,(1个训练集)(2个测试集)。现在我想计算每个测试集行和列车集行之间的欧几里德距离。但是,我只想包括该行的前4个点
一个有效的例子是:
dist = np.linalg.norm(inner1test[0][0:4]-inner1train[0][0:4])
print(dist)
***output: 3.034243***
问题是我有120个训练集点和30个测试集点——因此我必须手动执行2700个操作,因此我考虑使用for循环进行迭代。不幸的是,我的每一次尝试都失败了
这将是我最好的尝试,它会显示错误消息
for i in inner1test:
for number in inner1train:
dist = np.linalg.norm(inner1test[i][0:4]-inner1train[number][0:4])
print(dist)
(IndexError: arrays used as indices must be of integer (or boolean) type)
迭代此数组的最佳解决方案是什么
ps:我还将提供一个屏幕截图,以便更好地可视化
这是最终的解决方案,为我提供了正确的输出:
从我所看到的,
inner1test
是列表的元组,因此i
值将不是索引,而是实际的列表您应该使用enumerate,它返回两个变量,索引和实际数据
此外,如果你的列表开始变大,考虑使用一个生成器,它将每次迭代执行你的计算迭代,每次只返回一个值,避免返回一大块会占用大量内存的结果。p>
例如:
您可能还想研究python列表理解,这有时是处理带有列表的循环的更优雅的方式
[编辑]
不管怎么说,这里有一个可能更简单的解决方案,不需要索引,它不会不枚举numpy对象:
[/编辑]
相关问题 更多 >
编程相关推荐