【发布时间】:2013-07-20 00:40:42
【问题描述】:
我有这段代码应该找到 A 中每个数字的标准偏差,其中 A 是由 7 个值组成的列表列表。
def sigma(A):
diff = 0
positives = [b for b in A if b >= 0]
if positives:
mean = sum(positives) / len(positives)
for i in positives:
diff = ((sum([abs(i - mean)**2 for i in positives]))/(len(positives)))**(0.5)
return diff
else:
return 0
G = map(sigma, zip(*A))
print G
这正确地给了我第一个 7 个数字列表的标准偏差,但 map(sigma, zip(*A)) 不应该让它遍历所有列表吗?我也尝试过[sigma(A) for col in xrange(len(rows[0]))],但这也没有用。理想情况下,标准偏差也将保存为七人列表。任何帮助表示赞赏。
更新: 这是我现在拥有的代码;
def sigma(A):
diff = 0
positives = [b for b in A if b >= 0]
if positives:
mean = sum(positives) / len(positives)
diff += ((sum([abs(i - mean)**2 for i in positives]))/(len(positives)))**(0.5)
for i in positives:
if (abs(i - mean)) > (diff*3):
return -9999.00
else:
return i
else:
return -9999.00
G = map(sigma, zip(*A))
print G
它完成了我想要它做的所有事情,但是当我以这种方式运行它时,它只输出第一行。如果将“return”语句替换为“print”并删除print G,则打印所有行的我想要的输出。如何将所有这些值存储在列表中?我假设这是这条线G = map(sigma, zip(*A)) 这就是问题所在。我尝试将其更改为G = map(sigma, A),但这只会给我第一列的数字。
有人有什么想法吗?
【问题讨论】:
-
什么“所有列表”?简短的回答是“是”,但
A的结构很可能会打破这种局面。因此,您需要发布更多信息,具体回答“A长什么样?”和“你得到什么错误?” -
“但这也不起作用”。当然,因为软件只有一种故障模式,我们都知道这意味着什么。
-
A 看起来像
[[-9999.0, -9999.0, -9999.0, -9999.0, -9999.0, -9999.0, -9999.0], [-9999.0, -9999.0, -9999.0, -9999.0, -9999.0, -9999.0, -9999.0], [0.040896, 0.018690, 0.005620, -9999.0, 0.038722, 0.018323, -9999.0], [0.039443, 0.017517, 0.003460, -9999.0, 0.035526, 0.011692, -9999.0], [-9999.0, 0.017963, 0.005264, -9999.0, 0.03788, 0.014316, -9999.0]]所以“所有列表”将是 5 组 7 个数字。我没有收到错误,我只是没有得到我想要的所有信息(所有 5 次迭代)。
标签: python list loops python-2.x standard-deviation