我有两个阵列:一个有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]
答案 0 :(得分:4)
您想要比较两个信号,例如以下示例中为A
和B
:
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]