python - 从元组列表中减去元组列表
问题描述
我有 2 个数据集,一个有 40 个案例,另一个只有 20 个。为了便于解释,我制作了一个小得多的版本。
dataset1 = [(1.5, 2.4), (-7.9, 3.5), (6.3, 6.2), (8.3, 4.1), (4.1, 4.2)]
dataset2 = [(2.9, 3.0), (4.3, 2.9)]
该程序的思路是计算dataset2[0] (2.9, 3.0)中的点到dataset1中所有点的欧几里得距离,然后对dataset2[1] (4.3, 2.9)进行同样的处理,比较所有点在数据集 1 中。
我想使用我自己的编码来创建这个程序,而不是导入外部包。我尝试了以下两个公式:
尝试 1(给出 TypeError: unsupported operand type for -: 'tuple' and 'tuple'):
def distance_calculate(dataset1, dataset2):
distance = 0
for i in range(len(point1)):
# subtracting x-coord then summing with difference of y-coord
distance += (dataset1[i] - dataset2[i])**2
return distance**0.5
尝试 2(给出 IndexError: list index out of range):
def distance_calculate(dataset1, dataset2):
distance = 0
for i in range(len(dataset1)):
# selecting 0th coordinate for both datasets, and 1st coordinate for both datasets
distance += (dataset1[i][0] - dataset2[i][0])**2 + (dataset1[i][1] - dataset2[i][1])**2
return distance**0.5
任何帮助将不胜感激,无论是调整上述方法还是我完全遗漏了一些东西!
谢谢!
解决方案
你还没有告诉我们输出应该是什么样子。这是一个使用map()
将值作为列表列表返回的版本:
dataset1 = [(1.5, 2.4), (-7.9, 3.5), (6.3, 6.2), (8.3, 4.1), (4.1, 4.2)]
dataset2 = [(2.9, 3.0), (4.3, 2.9)]
def distance(p1, p2):
return (p1[0] - p2[0])**2 + (p1[1] - p2[1])**2
def subtract(d1, d2):
return list(map(
lambda p1: list(map(
lambda p2: distance(p1, p2),
d2
)),
d1
))
print(subtract(dataset1, dataset2))
和(美化的)结果:
[
[2.32, 8.09],
[116.89000000000001, 149.2],
[21.8, 14.890000000000002]
[30.370000000000005, 17.440000000000005],
[2.88, 1.7300000000000006]
]
如果您想要其他形状,请翻转地图顺序。
推荐阅读
- python - 尝试在 Python 中使用随机数为数独创建矩阵
- spring-boot - 关联实体 JPA 的最佳方式
- reactjs - 当数据被推送到空数组时,redux reducer 不会改变状态
- android - Google Developer Console 是否会接受在与旧软件包同名的不同软件包中创建的应用进行更新?
- javascript - 如果检查输入,如何显示 div
- amazon-cloudformation - CDK/Cloudformation 中资源的逻辑 ID 中的哈希
- python - 有关带有方程和索引的输出数组的更多信息
- android - 我怎样才能实现这种布局
- java - 二维矩阵迷宫中最便宜路径的寻路算法
- git - 如何从先前分支而不是当前分支创建新分支,并在该分支和当前分支之间切换