通过广播在轴上矢量化 np.minimum & np.minimum

Vectorizing np.minimum & np.minimum over axes with broadcasting

我大概有这样的东西

A = np.random.random([n, 2])
B = np.random.random([3, 2])
...
ret = 0
for b in B:
    for a in A:
        start = np.max([a[0], b[0]])
        end = np.min([a[1], b[1]])
        ret += np.max([0, end - start])
return ret

换句话说,An 二维区间的输入数组,B 是已知的二维区间数组,我正在尝试计算长度所有间隔之间的总交集。

有没有办法对其进行矢量化?我的第一个虽然是使用 np.maximizenp.minimize 以及广播,但似乎没有任何效果。

Broadcast 在扩展维度以向量化事物之后 -

p1 = np.maximum(A[:,None,0],B[:,0])
p2 = np.minimum(A[:,None,1],B[:,1])
ret = np.maximum(0,p2-p1).sum()