Numpy - 计算固定距离的阵列中所有可能的差异

1 python numpy difference

假设我有一个数组,我想计算远处元素之间的差异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))
Run Code Online (Sandbox Code Playgroud)

但如果这是最有效的方法,我会感到惊讶.那些熟悉最开放功能的人的想法是numpy什么?

Car*_*ten 6

以下函数返回一个二维numpy数组diff,其中包含list或numpy数组的所有可能组合之间的差异a.例如,diff[3,2]将包含结果a[3] - a[2]等等.

def difference_matrix(a):
    x = np.reshape(a, (len(a), 1))
    return x - x.transpose()
Run Code Online (Sandbox Code Playgroud)

更新

我似乎误解了这个问题,而你只是要求d相距一定距离的数组元素的差异.1)

这可以通过以下方式完成:

>>> a = np.array([1,3,7,11,13,17,19])
>>> d = 2
>>> a[d:] - a[:-d]
array([6, 8, 6, 6, 6])
Run Code Online (Sandbox Code Playgroud)

查看文档以了解有关此表示法的更多信息.

但是,我在上面发布的差异矩阵的功能不应该是徒劳的.实际上,您正在寻找的数组是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])
Run Code Online (Sandbox Code Playgroud)

1)根据您的注释判断,此距离dDelta您使用的距离不同d = Delta - 1,因此元素与其自身之间的距离为0,与相邻元素的距离为1.