NumPy逐元素标准差

3

假设我有n个相同维度的二维矩阵M1,M2,M3,...

有没有一种高效的方法来生成一个输出矩阵MR,其中MR中的每个元素对应于M1,M2,M3 ...中该位置的元素的标准差

下面是一个操作示例:

       1 4 5   8 2 3   -1 8 2      4.73  3.06  1.53
stdev( 3 9 2,  2 1 0,   0 3 1 ) =  1.53  4.16  1.00
       7 1 2   8 3 1    9 5 8      1.00  2.00  3.79

为了澄清:结果矩阵的左上角元素计算如下:
stdev(1,8,-1) = 4.7258

而左下角元素的计算如下:

stdev(7,8,9) = 1.00

如果没有内置的操作符可以一次性完成此操作,那么有没有有效的替代方法?

以下是测试矩阵:

a=numpy.array( [[1,4,5],[3,9,2],[7,1,2]])
b=numpy.array( [[8,2,3],[2,1,0],[8,3,1]])
c=numpy.array([[-1,8,2],[0,3,1],[9,5,8]])

1
你可以再具体一些吗?你用哪些数字来计算标准差呢?例如,我不清楚你使用哪些数字得出了“1.00”的标准差。 - Dietrich
我已经努力解释了@Dietrich。 - Richard
啊,这是自由度问题,@lejlot。谢谢。 - Richard
2个回答

6

numpy 是你的好朋友

import numpy as np
print np.std((a,b,c), axis=0, ddof=1)

为提供的矩阵计算,它能够给出结果。
array([[ 4.72581563,  3.05505046,  1.52752523],
       [ 1.52752523,  4.163332  ,  1.        ],
       [ 1.        ,  2.        ,  3.7859389 ]])

如预期所料。

您的建议未能产生所需的输出。 - Richard
1
是的,刚刚发现了。 - Richard

1

首先将您的数据放入一个数组中:

d = np.dstack((a,b,c))

然后沿着第三个轴带上 std:

np.std(d, 2, ddof=1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接