假设我有一个数组,并且我想计算距离为Delta
的元素之间的差异。我可以使用numpy.diff(Array[::Delta-1])
,但这不会给出所有可能的差异(从每个可能的起点)。为了得到它们,我可以想到这样的事情:
for j in xrange(Delta-1):
NewDiff = numpy.diff(Array[j::Delta-1])
if j==0:
Diff = NewDiff
else:
Diff = numpy.hstack((Diff,NewDiff))
但如果这是最有效的方法,我会感到惊讶。那些熟悉numpy
的最开放功能的人的想法?
答案 0 :(得分:6)
以下函数返回一个二维numpy数组diff
,它包含列表或numpy数组a
的所有可能组合之间的差异。例如,diff[3,2]
将包含a[3] - a[2]
的结果,依此类推。
def difference_matrix(a):
x = np.reshape(a, (len(a), 1))
return x - x.transpose()
我似乎误解了这个问题而你只是要求相距一定距离d
的数组元素的差异。 1)
这可以通过以下方式实现:
>>> a = np.array([1,3,7,11,13,17,19])
>>> d = 2
>>> a[d:] - a[:-d]
array([6, 8, 6, 6, 6])
查看at the documentation以了解有关此表示法的更多信息。
但是,上面发布的差异矩阵I的功能不应该是徒劳的。实际上,您正在寻找的数组是difference_matrix
返回的矩阵的对角线。
>>> a = [1,3,7,11,13,17,19]
>>> d = 2
>>> m = difference_matrix(a)
>>> np.diag(m, -d)
array([6, 8, 6, 6, 6])
1)根据您的评论判断,此距离d
与您似乎正在使用的Delta
不同,d = Delta - 1
,以便元素与本身为0,与相邻元素的距离为1。