给定实数系数A的任何n×n矩阵,我们可以定义双线性形式bA:Rn x Rn→R by
bA(x,y) = xTAy,
和二次形式qA:Rn→R by
qA(x) = bA(x,x) = xTAx .
(对于二次型qA的大多数常见应用,矩阵A是对称的,甚至是对称的正定,因此可以自由地假设其中任何一个都是这种情况,如果它对你的答案很重要.)
(另外,FWIW,bI和qI(其中I是n×n单位矩阵)分别是标准内积和Rn上的L2范数平方,即xTy和xTx.)
现在假设我有两个nxm矩阵,X和Y,以及一个nxn矩阵A.我想优化bA(x,i,y,i)和qA(x,i)的计算(其中x,i和y,我分别表示X和Y的第i列,我推测,至少在像numpy,R或Matlab这样的环境中,这将涉及某种形式的矢量化.
我能想到的唯一解决方案需要生成对角块矩阵[X],[Y]和[A],分别为维数mn xm,mn xm和mn x mn,以及(块)对角元素x,i和A分别.然后,期望的计算将是矩阵乘法[X] T [A] [Y]和[X] T [A] [X].这种策略绝对没有灵感,但如果有办法在时间和空间方面都很有效,我希望看到它. (不言而喻,任何不利用这些块矩阵的稀疏性的实现都将注定失败.)
有更好的方法吗?
我对系统的偏好是numpy,但是支持高效矩阵计算的其他系统(如R或Matlab)的答案也可以(假设我可以弄清楚如何将它们移植到numpy).
谢谢!
当然,计算产品XTAY和XTAX会计算所需的bA(x,i)(作为得到的mxm矩阵的对角元素),以及O(m2)不相关bA(x,j)和bA(x,x,j),(对于i≠j),所以这是一个非启动器.
最佳答案
原文链接:https://www.f2er.com/python/439232.html