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

时间:2011-12-10 14:15:41

标签: python r matlab matrix numpy

给定实数系数 A 的任何 n x n 矩阵,我们可以定义双线性形式 b < sub> A R n x R n R by

  

b A x y )= x T Ay

和二次形式 q A R n R by

  

q A x )= b A x x )= x T Ax

(对于二次型 q A 的大多数常见应用,矩阵 A 是对称的,甚至是对称的正定,所以请放心假设其中任何一个都是这种情况,如果它对你的答案很重要。)

(另外,FWIW, b I q I (其中 I n x n 单位矩阵)分别是标准内积,平方 L 2 R n 上的-norm,即 x T y x Ť X 。)

现在假设我有两个 n x m 矩阵, X Y ,以及 n x n 矩阵 A 。我想优化 b A 的计算( x ,i y ,i )和 q A x ,我 )(其中 x ,i y ,i 表示分别是 X Y i - 列,我推测,至少在某些环境中,比如numpy,R或Matlab,这将涉及某种形式的矢量化。

我能想到的唯一解决方案是需要生成对角线块矩阵[ X ],[ Y ]和[ A ] mn x m mn x m mn x mn ,分别和(块)对角元素 x ,i y ,i ,和 A 分别。然后所需的计算将是矩阵乘法[ X ] T [ A ] [ Y ]和[< EM> X Ť [ A ] [ X ]。这种策略绝对没有灵感,但如果有办法在时间和空间方面都很有效,我希望看到它。 (毫无疑问,任何不利用这些块矩阵的稀疏性的实现都将注定失败。)

有更好的方法吗?

我对系统这样做的偏好是numpy,但是对于支持高效矩阵计算的其他系统(如R或Matlab)而言,答案也可以(假设我可以弄清楚如何将它们移植到numpy) )。

谢谢!

<子> 当然,计算产品 X T AY X T AX 会计算出所需的 b < / em> A x ,i y ,i )和 q A x ,i )(如得到的 m x m 矩阵的对角元素),以及 O m 2 )无关 b A x ,i y ,j )和 b A x ,i x ,j ),( i j ),所以这是一个非首发。

3 个答案:

答案 0 :(得分:4)

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

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

这对X T * A进行矩阵乘法,然后将逐个元素的数组乘法乘以Y T 。然后将得到的数组的行相加以产生1-D数组。

答案 1 :(得分:1)

目前还不完全清楚您要实现的目标,但在R中,您使用crossprod来形成交叉产品:给定矩阵XY具有兼容尺寸,{ {1}}返回X T Y.同样,使用crossprod(X, Y)运算符实现矩阵乘法:%*%返回乘积XY。所以你可以得到X T AY为X %*% Y,而不必担心矩阵乘法,循环或其他什么的机制。

如果您的矩阵具有允许优化计算的特定结构(对称,三角形,稀疏,带状,......),您可以查看crossprod(X, A %*% Y)包,它对此有一些支持。

我没有使用过Matlab,但我确信它会为这些操作提供类似的功能。

答案 2 :(得分:-1)

如果你想在MATLAB中这样做,那真的很简单:

您只需输入

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

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

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