首页 > 解决方案 > 不同维度矩阵的二项式公式实现

问题描述

我正在尝试为维度为 n 2 的两个矩阵 x 和维度为 m 2 的 y实现 (xy)^2 。我认为要解决它,我们可以应用二项式公式 (xy)^2 = x^2-2x.T y+y^2=xT x-2x.T y+yT y。

我的初稿如下:

tmp1 = numpy.square(input1)
tmp2 = numpy.square(input2)
res = numpy.dot(input1, input2.T)
res *= -2
res += temp1.reshape(-1, 1)
res += temp2
return np.exp(res)

不幸的是,经过数小时的尝试,我的时间变量的维度仍然存在问题。如果能进一步帮助如何为不同大小的矩阵编写二项式公式,那就太好了。非常感谢!

标签: pythonnumpymatrixbinomial-theorem

解决方案


假设您的意思是x并且y是两个具有不同维度的一维数组,并且您想要它们outer差异的平方:

In [98]: x = np.arange(1,5); y = np.arange(5,8); x,y
Out[98]: (array([1, 2, 3, 4]), array([5, 6, 7]))

(x-y)^2可以通过以下方式轻松完成broadcasting

In [99]: (x[:,None]-y)**2
Out[99]: 
array([[16, 25, 36],
       [ 9, 16, 25],
       [ 4,  9, 16],
       [ 1,  4,  9]])

或者,如果我们制作:

In [100]: x1 = x[:,None]       # (4,1) shape
In [101]: (x1-y)**2
Out[101]: 
array([[16, 25, 36],
       [ 9, 16, 25],
       [ 4,  9, 16],
       [ 1,  4,  9]])

那么你的二项式公式是:

In [103]: x1**2 - 2*x1*y+y**2
Out[103]: 
array([[16, 25, 36],
       [ 9, 16, 25],
       [ 4,  9, 16],
       [ 1,  4,  9]])

x是 1d,所以x.T不会改变任何东西。我认为您的目标是将(1,4)转换为(4,1)。

如果数组不同,比如 2d,你需要给出一个清晰的例子。

如果数组是“行向量”,则它们是等效的:

In [105]: x.shape, y.shape
Out[105]: ((1, 4), (1, 3))
In [106]: (x.T-y)**2
...
In [107]: x.T**2 - 2*x.T*y + y**2

编辑

寻找“二项式论坛矩阵”,我发现:

https://math.stackexchange.com/questions/2754278/binomial-formula-for-matrices

这谈论了很多关于矩阵是否是可交换的,等等。

我展示的是如何将基本的标量二项式公式逐元素应用于数组。(m,) 和 (n,) 形状的数组(有效地)扩展为 (m,n),并且按元素应用公式。基本运算符 '+-*' 都按元素应用,并使用broadcasting.

您的问题和评论中不清楚的是什么x^2x.Tx以及x.Ty何时xy是 2d。哪些是矩阵乘法,用numpy( np.dot)@写成np.matmul

矩阵乘法对维度如何组合有特定的规则。A (3,2) @ (2,4) => (3,4),而 (2,4) @ (3,2) 会产生错误。

并且 (3,2) 不能与 (4,2) 为 +/-。可以扩展维度并产生(3,4,2)“外部”和或差。


推荐阅读