Векторизация np.minimum и np.minimum по осям с трансляцией - PullRequest
0 голосов
/ 31 октября 2018

У меня примерно есть что-то вроде

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

Если выразить словами, A - это входной массив n 2D-интервалов, а B - известный массив 2D-интервалов, и я пытаюсь вычислить длину общего пересечения между всеми интервалами.

Есть ли способ векторизовать его? Сначала я использовал np.maximize и np.minimize вместе с вещанием, но, похоже, ничего не работает.

1 Ответ

0 голосов
/ 31 октября 2018

Broadcast после расширения размеров для векторизации вещей -

p1 = np.maximum(A[:,None,0],B[:,0])
p2 = np.minimum(A[:,None,1],B[:,1])
ret = np.maximum(0,p2-p1).sum()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...