我试图计算以下样本数据集的平均值:
bogie-n bypass-n 0.00304367004111
flask-n bypass-n 0.00298246799918
faggot-n sprayer-n 0.00507314183347
bypass-n sprayer-n 0.00136494481917
sprayer-n sprayer-n 1.0
我想从平均值的计算中去掉任何等于1或等于0的值。 为此,我编写了以下代码:
with open(infile) as f:
cols = [float(row.split("\t")[2]) for row in f.readlines()]
for col in cols:
if col == 1 or col == 0:
pass
else:
normalizedDataEuc = float(sum(cols))/float(len(cols))
output = infile + "\t" + str(normalizedDataEuc) + "\n"
print output
这段代码成功地计算了整个数据集的平均值(在上面的示例数据中是0.202492845
),但是在排除1的值(即0.202492845
)时,它无法计算数据集的平均值。你知道吗
我试图实现一个双条件,col
变量要满足这个条件,但它似乎没有这样做,有什么建议吗?你知道吗
您的双重条件工作得很好(当您在其中放入一些print语句时可以看到);问题是在
for
循环的每次迭代中,您都会计算整个cols
列表的平均值。你知道吗相反,您应该过滤
cols
列表以删除1
和0
值,然后计算过滤列表的平均值(只有这两行,没有循环):http://blog.explainmydata.com/2012/07/expensive-lessons-in-python-performance.html
“韦斯·麦金尼是个天才。如果你正在实现Wes McKinney已经放在他的库中的任何东西,就停下来。他的代码比你要写的任何东西都更快,更健壮,更可能是正确的。想要滚动窗口聚合器吗?使用熊猫。需要处理丢失的数据吗?使用熊猫。你是不是在写一个令人难以置信的丑陋的黑客,试图实现连接和分组比的过NumPy数组,但实际上花了3个小时计算一个微妙的不正确的结果?(我已经这样做了)。天哪,停下来用熊猫。”
我同意这一点。就用熊猫吧。这是毫无意义的重做已经做了以前和更多的人和优化的性能。你知道吗
解决方案:
相关问题 更多 >
编程相关推荐