我有这两个向量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
我该怎么办?这两个数组是一个例子,在我的例子中我有一个非常大的数组,我不能手动完成。
答案 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