我正在寻找从数组B的所有元素中减去数组A的所有元素的最快方法。我知道的唯一方法是:

a = np.array([1,2,3])
b = np.array([1,2,3])
new = []
for i in a:
    new.append(b - a[i])

理想情况下,我希望最终得到一个矩阵new,它等于[0,1,2;-1,0,1;-2,-1,0]
我还想将这种类型的操作扩展到pandas timedelta系列。例如,我可以这样做:
a=np.array([1,2,3])
b=np.array([1,2,3])
aT = pd.to_timedelta(a,'D')
bT = pd.to_timedelta(b,'D')
new = []

for i in aT:
    x.append(bT - i)

结果是:
[TimedeltaIndex(['0 days', '1 days', '2 days'], dtype='timedelta64[ns]', freq='D'), TimedeltaIndex(['-1 days', '0 days', '1 days'], dtype='timedelta64[ns]', freq='D'), TimedeltaIndex(['-2 days', '-1 days', '0 days'], dtype='timedelta64[ns]', freq='D')]

但对于非常大的阵列来说,这是非常缓慢的。
·

最佳答案

b扩展到具有np.newaxis/None的2D数组情况,然后让broadcasting为快速矢量化解决方案发挥作用,如下所示-

a - b[:,None]

样本运行-
In [19]: a
Out[19]: array([1, 2, 3])

In [20]: b
Out[20]: array([1, 2, 3])

In [21]: a - b[:,None]
Out[21]:
array([[ 0,  1,  2],
       [-1,  0,  1],
       [-2, -1,  0]])

08-16 23:55