我有一个包含数字和零的 3x3 数组。我需要计算下一个点 ls[i+1] 和它之前的点 ls[i] 之间的绝对差值。这是我的列表的示例:
ls=[(98.6,99,0),(98.2,98.4,97.1),(97.6,0,98.3)]
零是错误数据。我需要一个循环:
- 取每一行中 future 数字和当前数字的绝对差值,
- 使大于最大差值的差值为零 (
max diff=1.9在这种情况下,假设零是错误数据), - 将每一行的差异加在一起,这样我就得到了一个总和列表。
就目前而言,最终结果将是:
result=[(0.4,99),(0.2,1.3),(97.6,98.3)]
鉴于零不是好的数据,大于 1.9 的差异不是准确的结果。
请您参考如下方法:
如果您愿意将给定最大差异值的差异设置为 0,或许可以在第二步中实现该逻辑:
ls=[(98.6,99,0),(98.2,98.4,97.1),(97.6,0,98.3)]
unfiltered = [tuple(abs(x1 - x2) for x1, x2 in zip(tup, tup[1:]))
for tup in ls]
max_diff = 1.9
results = [tuple((x if x < max_diff else 0) for x in tup)
for tup in unfiltered]
如果您的对象不是 native python 列表/元组但支持索引,最好这样做:
ls=[(98.6,99,0),(98.2,98.4,97.1),(97.6,0,98.3)]
unfiltered = [tuple(abs(item[i] - item[i+1]) for i in range(len(item)-1))
for item in ls]
max_diff = 1.9
results = [tuple((x if x < max_diff else 0) for x in tup)
for tup in unfiltered]
