如何将双线性和二次型的评价矢量化?

2024-06-28 21:00:36 发布

您现在位置:Python中文网/ 问答频道 /正文

给定任何实系数矩阵nxn矩阵,我们可以定义一个双线性形式

bA(x, y) = xTAy ,

一个二次型

qA(x) = bA(x, x) = xTAx .

(对于最常见的二次型的应用,矩阵是对称的,甚至是对称的正定的,如果你的答案很重要的话,你可以假设这两种情况中的任何一种都是这样。)

(此外,FWIW、bIqI(其中Inxnxnn身份矩阵)分别是标准内积,平方的平方L22R,即R,即xTy>y,即xTyyxTx

现在假设我有两个nxm矩阵,xY,还有一个nxn矩阵A。本人愿优化两个bAAAx,Iy,I)及qAAx,I)(其中x,Iy<及y,I<表示,I表示,I表示,I表示,I表示,I。分别是xyI第th列),我推测,至少在一些环境中,如numpy,R,或Matlab,这将涉及某种形式的矢量化。在

我能想到的唯一解决方案是分别用(块)对角元素X,[Y]和[A,分别生成维数mnXmmnXmmnXmn,[Y,IX,IXA,分别是A。那么所需的计算将是矩阵乘法[X]T[A][Y]和[X]T[A][X]。这一策略绝对是毫无创意的,但如果有一种方法在时间和空间上都有效的话,我想看看。(不用说,任何不利用这些块矩阵稀疏性的实现都将注定失败。)

有更好的方法吗?在

我更喜欢使用numpy,但是对于支持高效矩阵计算的其他系统,比如R或Matlab,答案也可以(假设我可以找到如何将它们移植到numpy)。在

谢谢!在

当然,计算产品XTAYXTAX的产品计算,当然会计算出所期望的bem>AAX,i,iy,i)和qqem>eem>em>AAX,i,i,i<)(作为生成的mXm矩阵的对角线元素),与(em>O(em>m2)无关的非相关bA(em>x,i,iy,j)和bA一个一个Sem>,j,j),(对于ij),所以这不是一个启动程序。


Tags: 方法答案numpy元素产品矩阵形式aa
3条回答

我们并不完全清楚您要实现什么,但是在R中,您使用crossprod来形成交叉积:给定的矩阵X和{}具有兼容的维数,crossprod(X, Y)返回XTY。类似地,矩阵乘法是通过%*%运算符实现的:X %*% Y返回乘积XY。因此,你可以得到XTAY作为crossprod(X, A %*% Y),而不必担心矩阵乘法、循环等机制。在

如果你的矩阵有一个特殊的结构,允许优化计算(对称、三角形、稀疏、带状等),你可以看看Matrix包,它对此有一些支持。在

我没有用过Matlab,但我相信它对这些操作也有类似的功能。在

如果你想在MATLAB中实现它,它非常简单:

你可以打字

b = x'*A*y;
q = x'*A*x;

我怀疑这是否值得,但如果你想加快速度,你可以试试这个:

^{2}$

以下是numpy中的一个解决方案,它可以满足您的需要:

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

这会对XT*A进行矩阵乘法,然后进行逐元素数组乘法以乘以YT。然后将结果数组的行相加,得到一个一维数组。在

相关问题 更多 >