2

我正在寻找python中的内置函数,它将函数应用于列表(或其他可迭代)中的每个元素和下一个元素,在新列表中返回结果集。我不知道是否内置了一个,但如果可能的话,我正试图以一种功能性的方式来解决这个问题。

例子:

l = [1,2,3,4,5]
# returns [3,5,7,9]
# add(1,2) add(2,3) add(3,4) add(4,5)

我的实际用例是我有一个形式为 的向量列表numpy.array([1,2,3]),我想找出每个连续向量之间的差异。

实际示例:

l = [numpy.array([1,2,3]), numpy.array([2,7,6]), numpy.array([4,5,6])]
# find the difference between each vector (l[0]-l[1], l[1]-[l2], .. etc)
4

3 回答 3

10

你想要pairwise()map()

于 2012-06-03T22:40:15.150 回答
4

最直接的方法是在列表理解中:

a = [l[i] + l[i+1] for i in range(len(l)-1)]

或者,您可以使用一点内置魔法:

map(sum, zip(l, l[1:]))
于 2012-06-03T22:43:12.680 回答
2

可以通过以下方式查找 NumPy 数组的连续条目之间的差异numpy.diff()

>>> a = numpy.array([5, 2, 3, 1, 4])
>>> numpy.diff(a)
array([-3,  1, -2,  3])

这将比任何纯 Python 解决方案快得多。

编辑:这是一个二维数组的例子:

>>> a = numpy.array([[1,2,3], [2,7,6], [4,5,6]])
>>> numpy.diff(a, axis=0)
array([[ 1,  5,  3],
       [ 2, -2,  0]], dtype=int32)
于 2012-06-03T22:40:44.780 回答