作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从以下三个列表到 Python 中的协方差矩阵(numpy 数组)是否有最快的方法?
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 矩阵。从上面的数组创建一个 DataFrame df
并使用 pivot_table
对第三列进行透视。
例如,如果您有以下字典 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]}
像这样创建 DataFrame:
df = pd.DataFrame(d)
然后:
>>> 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 数组:
>>> 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 的回答 here 中得到了使用 combine_first
的想法)
关于Python:从列表创建协方差矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27061268/
在我的设置中,我试图有一个界面 Table继承自 Map (因为它主要用作 map 的包装器)。两个类继承自 Table - 本地和全局。全局的将有一个可变的映射,而本地的将有一个只有本地条目的映射。
Rust Nomicon 有 an entire section on variance除了关于 Box 的这一小节,我或多或少地理解了这一点和 Vec在 T 上(共同)变体. Box and Vec
我是一名优秀的程序员,十分优秀!