2024-06-25 05:40:47 发布
网友
在Python(numpyarray)中,有没有一种从下面三个列表到协方差矩阵的最快方法?在
Fac2 Fac1 VarCovar a a 1.4 a b 0.7 a c 0.3 b a 0.7 b b 1.8 b c 6.3 c a 0.3 c b 6.3 c c 2.4
你可以使用Pandas轻松创建3x3矩阵。从上面的数组创建一个数据帧df,并使用pivot_table在第三列上旋转。在
df
pivot_table
例如,如果您有以下列表字典d:
d
{'Fac1': ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c'], 'Fac2': ['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'], 'VarCovar': [1.4, 0.7, 0.3, 0.7, 1.8, 6.3, 0.3, 6.3, 2.4]}
创建数据帧如下:
然后:
>>> df.pivot_table(rows='Fac1', cols='Fac2', values='VarCovar') Fac2 a b c Fac1 a 1.4 0.7 0.3 b 0.7 1.8 6.3 c 0.3 6.3 2.4
在末尾使用values属性将从表中返回一个NumPy数组:
values
>>> df.pivot_table(rows='Fac1', cols='Fac2', values='VarCovar').values array([[ 1.4, 0.7, 0.3], [ 0.7, 1.8, 6.3], [ 0.3, 6.3, 2.4]])
如果没有所有对,则可以以相同的方式继续,并用转置索引对填充缺少的值:
>>> d = {'Fac1': ['a', 'b', 'c' , 'b', 'c', 'c'], 'Fac2': ['a', 'a', 'a' , 'b', 'b', 'c'], 'VarCovar': [1.4, 0.7, 0.3, 1.8, 6.3, 2.4]} >>> df = pd.DataFrame(d) >>> table = df.pivot_table(rows='Fac1', cols='Fac2', values='VarCovar') >>> table.combine_first(table.T) Fac2 a b c Fac1 a 1.4 0.7 0.3 b 0.7 1.8 6.3 c 0.3 6.3 2.4
(我从DSM的回答中得到了使用combine_first的想法)
combine_first
你可以使用Pandas轻松创建3x3矩阵。从上面的数组创建一个数据帧
df
,并使用pivot_table
在第三列上旋转。在例如,如果您有以下列表字典
d
:创建数据帧如下:
^{pr2}$然后:
在末尾使用
values
属性将从表中返回一个NumPy数组:如果没有所有对,则可以以相同的方式继续,并用转置索引对填充缺少的值:
(我从DSM的回答中得到了使用
combine_first
的想法)相关问题 更多 >
编程相关推荐