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

前端之家收集整理的这篇文章主要介绍了如何对双线性和二次型的评估进行矢量化?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

给定实数系数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阵列.

原文链接:https://www.f2er.com/python/439232.html

猜你在找的Python相关文章