不同维度矩阵的二项式公式实现

问题描述

我正在尝试为维度为 n2 的矩阵 x 和维度为 m2 的 y 实现 (x-y)^2。我认为要解决它,我们可以应用二项式公式 (xy)^2 = x^2-2x.Ty+y^2=xTx-2x.Ty+yT 是。

我的初稿如下:

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)

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

解决方法

假设您的意思是 xy 是两个具有不同维度的一维数组,并且您想要它们 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,9]])

那么你的二项式公式是:

In [103]: x1**2 - 2*x1*y+y**2
Out[103]: 
array([[16,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 是 2d 时 x.Tyxy 的含义。哪些是矩阵乘法,用 numpynp.dot (@) 写成 np.matmul

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...