我正在从 3 个值的差异中产生一个平均值,并希望将它放在一个列表中
我想要平均的列表示例如下所示:
...
[6.0, 270.0, -55.845848680633168],
[6.0, 315.0, -47.572000492889323],
[6.5, 0.0, -47.806802767243724],
[6.5, 45.0, -48.511643275159528],
[6.5, 90.0, -45.002053150122123],
[6.5, 135.0, -51.034656702050455],
[6.5, 180.0, -53.266356523649002],
[6.5, 225.0, -47.872632929518339],
[6.5, 270.0, -52.09662072002746],
[6.5, 315.0, -48.563996448937075]]
前 2 列匹配最多有 3 行(这 2 列是极坐标),在这种情况下,我想取第 3 个元素之间的差异,将其平均并附加点的极坐标和平均结果到一个新列表中
for a in avg_data:
comparison = []
for b in avg_data:
if a[0] == b[0] and a[1] == b[1]:
comparison.append(b[2])
print comparison
z = 0 # reset z to 0, z does not need set now in if len(comp) == 1
if len(comparison) == 2: # if there are only 2 elements, compare them
z += -(comparison[0]) + comparison[1]
if len(comparison) == 3: # if all 3 elements are there, compare all 3
z += -(comparison[0]) + comparison[1]
z += -(comparison[0]) + comparison[2]
z += -(comparison[1]) + comparison[2]
z = z/3 #average the variation
avg_variation.append([a[0], a[1], z]) #append the polar coordinates and the averaged variation to a list
此代码将正确的数据输出到列表中,但每次遇到匹配的极坐标时都会输出它,所以我最终会得到重复的行。
为了阻止这种情况,我尝试实现一个 if 语句以在 avg_variation 列表中查找匹配的极坐标,然后再次执行平均
if a[0] not in avg_variation and a[1] not in avg_variation:
这不起作用,我收到错误
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我不认为任何或全部是我正在寻找的,因为我只想检查前两列而不是第三列与已经附加的值。有人知道如何使我的 if 语句更好吗?
为了更清楚我的实际问题是什么:
我的代码在嵌套列表中搜索第一个 2 个元素匹配的列表,对第三个元素执行计算,然后将它们附加到一个新列表中。我的问题是,如果有 2 或 3 行第一个 2 元素匹配它会将结果附加到新列表 2 或 3 次,我希望它只执行一次
编辑:对不起,我最初的问题是误导我的代码的目的。