使用python diff()的数组中所有1D点之间的差异?

Ast*_*rid 5 python numpy scipy difference

寻找关于如何编写函数(或者可以推荐已经存在的函数)的提示,该函数计算数组中所有条目之间的差异,即对数组diff()中的所有条目组合的实现,而不仅仅是连续对.

这是我想要的一个例子:

# example array
a = [3, 2, 5, 1]
Run Code Online (Sandbox Code Playgroud)

现在我们想要应用一个函数,它将返回所有条目组合之间的差异.现在假设这length(a) == 4意味着组合的总数是,对于N = 4; N*(N-1)*0.5 = 6(如果a的长度为5,则组合的总数将为10,依此类推).所以函数应该为vector返回以下内容a:

result = some_function(a)
print result
array([-1, 2, -2, 3, -1, -4])
Run Code Online (Sandbox Code Playgroud)

因此'函数'将类似于pdist但不是计算欧几里德距离,它应该简单地计算沿一个轴的笛卡尔坐标之间的差异,例如,如果我们假设条目a是坐标,则计算z轴.可以注意到,我需要每个差异的符号来理解每个点所在的轴的哪一侧.

谢谢.

wim*_*wim 4

像这样的东西吗?

>>> import itertools as it
>>> a = [3, 2, 5, 1]
>>> [y - x for x, y in it.combinations(a, 2)]
[-1, 2, -2, 3, -1, -4]
Run Code Online (Sandbox Code Playgroud)

  • @Astrid - 矢量化 numpy 版本将计算每个值两次,但在某些情况下它可能仍然更快。基本上,您需要“np.subtract.outer(a, a)”的下三角形。不过,在很多情况下,wim 的回答可能会更快。 (4认同)
  • 起初没有注意到 numpy 标签,并且您在问题中使用了列表数据。Joe的建议很好,然后您可以使用“np.tril_indices”从下三角形收集值 (2认同)