Вы можете транслировать всю арифметику и удалить петли.
r2 = (a[:,None]*a) * (b[:,None]-b) - (a[:,None]/a)
# Verify the correctness
np.array_equal(r, r2)
# True
Наконец, чтобы установить нулевые диагонали, либо используйте назначение на месте
r2[(np.arange(N),)*2] = 0
Или,numpy.fill_diagonal
, который также заполняет на месте.
np.fill_diagonal(r2, 0)