2012-10-10 110 views
5

我正在努力向量化以下操作。我有一个x,y,z距离数组,我需要找出每个向量之间的差异。Numpy 2D数组按行减行

temp_result = np.array([[0.8, 0., 1.], [0., -0.6, 1.],[0.8, 0., 1.]]) 

我打算做的是不用循环迭代进行相减。

temp_result[0] - temp_result[0] 
temp_result[0] - temp_result[1] 
temp_result[0] - temp_result[2] 
temp_result[1] - temp_result[0] 
temp_result[1] - temp_result[1] 
temp_result[1] - temp_result[2] 
temp_result[2] - temp_result[0] 
temp_result[2] - temp_result[1] 
temp_result[2] - temp_result[2] 

谢谢!

回答

2

这里有一个很好的基础重塑招:

arr = temp_result 
diffs = arr[:,None,:] - arr[None,:,:] 

然后arr[i]arr[j]之间的矢量差在diffs[i,j]被发现。

+1

这里有一个更简洁的版本:'diffs = arr [:,None] - arr [None,:]'。这是numpy广播能力的一个例子(http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)。 –

+0

我正在利用广播;你在那里做的是隐式地使用'newaxis'(这是一个很好的解决方案)。我会将其添加到答案中,谢谢! – nneonneo

+0

对不起,我不是故意暗示你没有使用广播!该声明是对该方法的一般评论。 –

0

查看scipy.spatial.distance,您可以查看所有距离的功能。

+0

我正在寻找留在numpy图书馆。有小费吗? – Fatoons