加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何对双线性和二次型的评估进行矢量化?

发布时间:2020-12-16 22:13:21 所属栏目:Python 来源:网络整理
导读:给定实数系数A的任何n×n矩阵,我们可以定义双线性形式bA:Rn x Rn→R by b A ( x , y ) = x T Ay , 和二次形式qA:Rn→R by q A ( x ) = b A ( x , x ) = x T Ax . (对于二次型qA的大多数常见应用,矩阵A是对称的,甚至是对称的正定,因此可以自由地假设其中任

给定实数系数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),所以这是一个非启动器.

最佳答案
这是一个numpy解决方案,可以为您提供所需的解决方案:

((np.matrix(X).T*np.matrix(A)).A * Y.T.A).sum(1)

这对XT * A进行矩阵乘法,然后逐个元素的数组乘法乘以YT.然后将得到的阵列的行相加以产生1-D阵列.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读