平方差的总和 - NumPy / Python

时间:2017-03-04 19:22:17

标签: python arrays numpy

我有这两个向量A和B:

import numpy as np
A=np.array([1,2,3])
B=np.array([8,7])

我希望用这个表达式添加它们:

Result = sum((A-B)**2)

我需要的预期结果是:

Result = np.array([X,Y])

其中:

X = (1-8)**2 + (2-8)**2 + (3-8)**2 = 110
Y = (1-7)**2 + (2-7)**2 + (3-7)**2 = 77

我该怎么办?这两个数组是一个例子,在我的例子中我有一个非常大的数组,我不能手动完成。

2 个答案:

答案 0 :(得分:5)

您可以将A作为二维数组并使用 numpy 的广播属性来对计算进行矢量化:

((A[:, None] - B) ** 2).sum(0)
# array([110,  77])

答案 1 :(得分:1)

由于您已经提到过您正在使用大型数组,并且重点关注性能,而np.einsum使用<% if ( session.isNew() ) { out.println( "<h1>New session starting </h1>" ); } else (session.is) { out.println( "<h1>You are already logged in!"); } %> <jsp:forward page="userlogin.jsp" /> <% <jsp:forward page="loginsucces.jsp" /> %> squaring进行组合操作有效地步骤,如此 -

sum-reduction

示例运行 -

def einsum_based(A,B):
    subs = A[:,None] - B
    return np.einsum('ij,ij->j',subs, subs)

运行时测试,使用大型数组扩展给定的样本In [16]: A = np.array([1,2,3]) ...: B = np.array([8,7]) ...: In [17]: einsum_based(A,B) Out[17]: array([110, 77]) -

1000x