我有这个程序来读取数据,平均每行三行,然后是平均下行列,到目前为止它确实很好。但是我现在正试图回过头来拿出负数据点,我遇到了一些麻烦:
from __future__ import division
import csv
v = open("Pt_2_Test_Data.csv", 'wb') #created file to write output to
A =[]
B = []
with open("test2.xls") as w:
w.next() # skip over header row
for row in w:
(date, time, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t,
u, LZA, SZA, LAM) = row.split("\t") # split columns into fields
A.append([(float(a) + float(b) + float(c))/3,
(float(d) + float(e) + float(f))/3,
(float(g) + float(h) + float(i))/3,
(float(j) + float(k) + float(l))/3,
(float(m) + float(n) + float(o))/3,
(float(p) + float(q) + float(r))/3,
(float(s) + float(t) + float(u))/3])
def mean(B):
return sum(B) / len(B)
for x in A:
if x > 0:
B.append(x)
print B
C = map(mean, zip(*B))
print C
v.close()
(我并不担心将数据写入文件,只是在最终平均值之前消除负数。)
答案 0 :(得分:2)
我不确定这是什么意思,但你可以改变你的平均功能:
def mean(B):
positives = [b for b in B if b >= 0]
return sum(positives) / len(positives)
这将为您提供B的非负成员的平均值。这是您要找的那种吗?
一般来说,这种理解是获取列表中非负成员的一种方法。另一种对我来说更有意义的方法是
filter (lambda i: i >=0, some_list)
但是,这似乎正在进行一些弃用。