如何计算python中两个数组的标准差?

时间:2014-10-09 15:15:18

标签: python python-2.7 scipy

我有两个阵列:一个有30年的观察,一个有30年的历史模型运行。我想计算观测值和模型结果之间的标准差,看看模型偏离观测的程度。我该怎么做呢?

修改

以下是两个数组(每个数字代表一年(1971-2000)):

obs = [ 2790.90283203  2871.02514648  2641.31738281  2721.64453125
2554.19384766  2773.7746582   2500.95825195  3238.41186523
2571.62133789  2421.93017578  2615.80395508  2271.70654297
2703.82275391  3062.25366211  2656.18359375  2593.62231445
2547.87182617  2846.01245117  2530.37573242  2535.79931641
2237.58032227  2890.19067383  2406.27587891  2294.24975586
2510.43847656  2395.32055664  2378.36157227  2361.31689453  2410.75
2593.62915039]

model = [ 2976.01928711  3353.92114258  3000.92700195  3116.5078125   2935.31787109
2799.75805664  3328.06225586  3344.66333008  3318.31689453
3348.85302734  3578.70800781  2791.78198242  4187.99902344
3610.77124023  2991.984375    3112.97412109  4223.96826172
3590.92724609  3284.6015625   3846.34936523  3955.84350586
3034.26074219  3574.46362305  3674.80175781  3047.98144531
3209.56616211  2654.86547852  2780.55053711  3117.91699219
2737.67626953]    

4 个答案:

答案 0 :(得分:4)

您想要比较两个信号,例如以下示例中为AB

import numpy as np

A = np.random.rand(5)
B = np.random.rand(5)

print "A:", A
print "B:", B

输出:

A: [ 0.66926369  0.63547359  0.5294013   0.65333154  0.63912645]
B: [ 0.17207719  0.26638423  0.55176735  0.05251388  0.90012135]

分析个别信号

每个信号的标准偏差你需要的东西:

print "standard deviation of A:", np.std(A)
print "standard deviation of B:", np.std(B)

输出:

standard deviation of A: 0.0494162021651
standard deviation of B: 0.304319034639

分析差异

相反,您可以计算差异并应用一些常见的度量,如绝对差值之和(SAD),平方差之和(SSD)或相关系数:

print "difference:", A - B
print "SAD:", np.sum(np.abs(A - B))
print "SSD:", np.sum(np.square(A - B))
print "correlation:", np.corrcoef(np.array((A, B)))[0, 1]

输出:

difference: [ 0.4971865   0.36908937 -0.02236605  0.60081766 -0.2609949 ]
SAD: 1.75045448355
SSD: 0.813021824351
correlation: -0.38247081

答案 1 :(得分:1)

使用numpy。

import numpy as np
data = [1.2, 2.3, 1.3, 1.2, 5.4]
np.std(data)

或者你可以试试这个:

import numpy as np
obs = np.array([1.2, 2.3, 1.3, 1.2, 5.4])
model = np.array([1.1, 2.4, 1.2, 1.2, 5.3])
np.std(obs-model)

答案 2 :(得分:0)

如果您正在执行比查找标准差和/或均值更复杂的事情,请使用numpy / scipy。如果您需要执行所有,请使用the statistics package from the Python Standard Library

>>> import statistics
>>> statistics.stdev([1, 2, 3])
1.0

它在Python 3.4中添加(参见PEP-450)作为Numpy的基本统计公式的轻量级替代。

答案 3 :(得分:0)

多个列表中相同索引的标准偏差(例如,比较模型与测量,多个测量数据等)

import numpy as np

obs = np.array([0,1,2,3,4])
model = np.array([2,4,6,8,10])

可以通过将数据堆叠到一个数组中来计算:

arr = np.vstack((obs,model))

现在,使用具有特定轴的np.std()计算标准偏差

std = np.std(arr,axis=0)

输出:

[1.0, 1.5, 2.0, 2.5, 3.0]