此代码有效。但我不禁感到这是一种黑客行为,尤其是“抵消”部分。我不得不把它放在那里,因为否则删除操作中的所有索引值都会被移位一次。更好的方法来删除统计异常值比这个?
# remove outliers > devs # of std deviations
devs = 1
deletes = []
for num, duration in enumerate(durations):
if (duration > (mean_duration + (devs * std_dev_one_test))) or \
(duration < (mean_duration - (devs * std_dev_one_test))):
deletes.append(num)
offset = 0
for delete in deletes:
del durations[delete - offset]
del dates[delete - offset]
offset += 1
想法如何使它更好?
'(持续时间>(mean_duration +(开发者* std_dev_one_test)))或(持续时间<(mean_duration - (devs * std_dev_one_test)))'简化为'abs(duration-mean_duration)> devs * std_dev_one_test',而不会失去任何可读性。 – PaulMcG 2012-07-07 07:22:05