首页 > 解决方案 > 数组中元素之间的相对差异

问题描述

我需要 (n, 3) 数组的第一列中的每个元素的差异x2 - x1 n次,以便产生 (n, n) 数组。意思是,我需要:

[0,0] - [0,0], [1,0] - [0,0], [2,0] - [0,0],...[n,0] - [0,0]
[0,0] - [1,0], [1,0] - [1,0], [2,0] - [1,0],...[n,0] - [0,0]
                             :
[0,0] - [n,0], [1,0] - [n,0], [2,0] - [n,0],...[n,0] - [n,0]

我试过numpy.diff(a[:,0])了,虽然这只产生直接相邻元素之间的差异,即[1,0] - [0,0], [2,0] - [1,0],...[n,0] - [n-1,0].

标签: pythonnumpy

解决方案


绝对不要使用三个嵌套的 for 循环来解决此类问题。

老实说,我不太了解您的最终目标,但是IIUC,您可以使用广播

(a - a[:, None])[..., 0]

产生

array([[ 0, -2,  3],
       [ 2,  0,  5],
       [-3, -5,  0]])

如果要对第二列执行相同的操作,只需使用[..., 1]etc。


如果您真的只需要在第一列中进行此操作(而不是在其他列中),那么计算所有内容然后提取第一个结果可能会过大。您可以先切片,然后使用广播进行减法

f = a[:, 0]
f - f[:, None]

推荐阅读