Python 优化给定位移下阵列距离的成对计算

Python 优化给定位移下阵列距离的成对计算,python,arrays,performance,python-2.7,numpy,Python,Arrays,Performance,Python 2.7,Numpy,我有一个包含数百万条目的数组。 我想计算另一个向量,包含所有的距离,对于成对的条目,它们在数组中被移位了一定数量的增量 实际上我在用这个: for i in range(0, len(a) - delta): difs = numpy.append(difs, a[i + self.delta] - a[i]) 有人知道如何更快地做到这一点吗 这里有一个类似的问题: 但我不想计算每对的距离 例如: >>> a = [1,5,7,7,2,6] >>>

我有一个包含数百万条目的数组。 我想计算另一个向量,包含所有的距离,对于成对的条目,它们在数组中被移位了一定数量的增量

实际上我在用这个:

for i in range(0, len(a) - delta):
    difs = numpy.append(difs, a[i + self.delta] - a[i])
有人知道如何更快地做到这一点吗

这里有一个类似的问题:

但我不想计算每对的距离

例如:

>>> a = [1,5,7,7,2,6]
>>> delta = 2
>>> print difs
array([ 6.,  2., -5., -1.])

假设
a
是一个numpy.array,一次索引所有对可能会得到相同的结果。这是一个矢量化的numpy解决方案

a = numpy.atleast_1d(a)  #// make sure a is a numpy array
idx_minuend = range(delta, len(a))
idx_subtrahend = range(0, len(a)-delta)
difs = a[idx_minuend] - a[idx_subtrahend]
进行一些测试,验证结果是否相同:

# // a little test with your data
import numpy
a = [1,5,7,7,2,6]
delta = 2

# // current version
difs = numpy.array([])
for i in range(0, len(a) - delta):
    difs = numpy.append(difs, a[i + delta] - a[i])

# // numpy vectorized version
a = numpy.atleast_1d(a)  #// make sure a is a numpy array
idx_minuend = range(delta, len(a))
idx_subtrahend = range(0, len(a)-delta)
difs2 = a[idx_minuend] - a[idx_subtrahend]

# // compare results
(difs == difs2).all()  # True

您可以使用
delta
a
进行切片,然后减去两个子阵列:

>>> a = np.array([1,5,7,7,2,6])
>>> delta = 2
>>> a[delta:] - a[:-delta]
array([ 6,  2, -5, -1])

对于大型阵列,这种切片操作可能非常快,因为不需要在
a
中创建额外的索引或数据副本。减法创建了一个新数组,其中包含所需的值。

您的python版本是什么?查看输入和预期输出的示例会很有用-您能发布一个小示例吗?