gpt4 book ai didi

python - 比较向量列表

转载 作者:行者123 更新时间:2023-12-01 06:49:02 28 4
gpt4 key购买 nike

我需要比较两个向量列表并获取它们相等的元素,例如:

veclist1 = [(0.453 , 0.232 , 0.870), (0.757 , 0.345 , 0.212), (0.989 , 0.232 , 0.543)]
veclist2 = [(0.464 , 0.578 , 0.870), (0.327 , 0.335 , 0.562), (0.757 , 0.345 , 0.212)]

equalelements = [(0.757 , 0.345 , 0.212)]
<小时/>

obs:元素的顺序无关紧要!

而且,如果可能的话我只想在比较中考虑到小数点后第二位但没有舍入或缩短它们。是否可以 ?提前谢谢!

最佳答案

# Get new lists with rounded values
veclist1_rounded = [tuple(round(val, 2) for val in vec) for vec in veclist1]
veclist2_rounded = [tuple(round(val, 2) for val in vec) for vec in veclist2]

# Convert to sets and calculate intersection (&)
slct_rounded = set(veclist1_rounded) & set(veclist2_rounded)

# Pick original elements from veclist1:
# - get index of the element from the rounded list
# - get original element from the original list
equalelements = [veclist1[veclist1_rounded.index(el)] for el in slct_rounded]

在这种情况下,如果只有舍入条目相等,我们就会选择 veclist1 的条目。否则需要调整最后一行。

如果需要所有原始元素,则可以使用两个原始列表来计算最终列表:

equalelements = ([veclist1[veclist1_rounded.index(el)] for el in slct_rounded]
+ [veclist2[veclist2_rounded.index(el)] for el in slct_rounded])

注意: round 可能有 issues ,应该是solved在当前的Python版本中。尽管如此,使用字符串可能会更好:

get_rounded = lambda veclist: [tuple(f'{val:.2f}' for val in vec) for vec in veclist]
veclist1_rounded, veclist2_rounded = get_rounded(veclist1), get_rounded(veclist2)

关于python - 比较向量列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59106106/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com