我有以下相关矩阵:
symbol abc xyz ghj
symbol
abc 1 0.1 -0.2
xyz 0.1 1 0.3
ghj -0.2 0.3 1
我需要能够找到整个数据帧的标准差,但必须排除完美的相关值,即:标准差不得考虑abc:abc,xyz:xyz,ghj:ghj
我可以使用以下方法获取整个数据框的标准偏差:
df.stack().std()
但这会考虑到每一个不正确的值。标准偏差不应包括项目与其自身相关的行/列组合(即:1)。有没有办法删除abc:abc,xyz:xyz,ghj:ghj。然后计算标准差。
也许把它转换成字典或什么?
答案 0 :(得分:1)
如果您使用numpy,则可以使用np.extract和np.std:
In [61]: import numpy as np
In [62]: a = np.array([[ 1. , 0.1, -0.2],
[ 0.1, 1. , 0.3],
[-0.2, 0.3, 1. ]])
In [63]: a
Out[63]:
array([[ 1. , 0.1, -0.2],
[ 0.1, 1. , 0.3],
[-0.2, 0.3, 1. ]])
In [64]: calc_std = np.std(np.extract(a != 1, a))
In [65]: calc_std
Out[65]: 0.20548046676563256
np.extract(a != 1, a))
会返回一个数组,其中包含a
的每个元素不等于为1。
返回的数组如下所示:
In [66]: np.extract(a != 1, a)
Out[66]: array([ 0.1, -0.2, 0.1, 0.3, -0.2, 0.3])
在此提取后,您可以使用np.std()
轻松计算标准偏差。