如何天真有效地编码二次形式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何天真有效地编码二次形式相关的知识,希望对你有一定的参考价值。
我正在尝试编码二次形式Z'(S)^ -1 Z
代码如下
z <- matrix(rnorm(200 * 100), 200, 100)
S <- cov(z)
quad.naive <- function(z, S)
Sinv <- solve(S)
rowSums((z %*% Sinv) * z)
但是,我不确定我是否完全理解该函数的最后一行
rowSums((z %*% Sinv) * z)
由于天真,我们应该键入与数学公式完全相同的
t(Z) %*% Sinv %*% Z
因此,任何人都可以解释为什么行和的形式与朴素的数学形式,特别是相同。为什么在两个度量(z和Sin)相乘之后,它使用逐个元素的乘号*乘以Z,而不是使用%*%。
(z %*% Sinv) * z
答案
以下内容发表评论的时间过长。
“我正在尝试编码二次形式Z'(S)^ -1 Z”我认为二次形式不正确。
假设Z
是m x n
矩阵。然后:
- [
S = cov(Z)
是n x n
矩阵 - [
S^-1
是n x n
矩阵 - [
t(Z)
是n x m
矩阵
因此,Z' S^-1 Z
(在R中为t(Z) %*% solve(S) %*% Z
)表示将具有以下尺寸的矩阵相乘
(n x m) (n x m) (m x n)
显然不起作用。
也许您是说Z %*% solve(S) %*% t(Z)
,它返回一个m x m
矩阵,其对角线与rowSums(Z %*% Sinv * Z)
相同。
以上是关于如何天真有效地编码二次形式的主要内容,如果未能解决你的问题,请参考以下文章