Python Numpy-计算固定距离数组中所有可能的差异

Python Numpy-计算固定距离数组中所有可能的差异,python,numpy,difference,Python,Numpy,Difference,假设我有一个数组,我想计算距离Delta的元素之间的差异。我可以使用numpy.diff(数组[::Delta-1]),但这不会给出所有可能的差异(从每个可能的起点)。为了得到它们,我可以想到这样的东西: for j in xrange(Delta-1): NewDiff = numpy.diff(Array[j::Delta-1]) if j==0: Diff = NewDiff else: Diff = numpy.hstack((Di

假设我有一个数组,我想计算距离
Delta
的元素之间的差异。我可以使用
numpy.diff(数组[::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
最开放功能的人有什么想法吗?

以下函数返回一个二维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])
请看一看,了解有关此符号的更多信息

但是,我上面发布的差分矩阵函数不会是徒劳的。事实上,您要查找的数组是
差分矩阵
返回的矩阵的对角线

>>> 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。

以下函数返回一个二维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])
请看一看,了解有关此符号的更多信息

但是,我上面发布的差分矩阵函数不会是徒劳的。事实上,您要查找的数组是
差分矩阵
返回的矩阵的对角线

>>> 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。

我不确定是否理解此代码,但在我看来,这是在做别的事情。它正在计算邻居之间的差异。这里的目的不同:给定一个距离Delta,我想计算所有的差异。假设我有一个向量
[1,3,7,11,13,17,19]
Delta=3
。我想得到
[6,8,6,6,6]
(顺序无关)@AJC好吧,我误解了你的问题。我已经相应地更新了我的答案。以前,它只回答了所有可能距离的更一般情况,而不是给定距离。事实上,为什么我要用numpy.diff使我的生活复杂化?我不确定我是否理解这段代码,但在我看来这是在做其他事情。它正在计算邻居之间的差异。这里的目的不同:给定一个距离Delta,我想计算所有的差异。假设我有一个向量
[1,3,7,11,13,17,19]
Delta=3
。我想得到
[6,8,6,6,6]
(顺序无关)@AJC好吧,我误解了你的问题。我已经相应地更新了我的答案。以前,它只回答了所有可能距离的更一般的情况,而不是给定的距离。事实上,为什么我要用numpy.diff使我的生活复杂化?