Если вы не запускаете ошибку памяти, вы можете сделать:
n = 200_000
s1 = np.random.randint(low=1, high=1000, size=(n,1))
s2 = np.random.randint(low=1, high=1000, size=(n,1))
t1 = s1 + s1.T
t2 = s2 + s2.T
tot = np.sum(t1>t2)
В противном случае вы можете создавать пакеты, и снова, в зависимости от того, что вы можете поместить в память, вы можете использовать один или два для циклов:
n = 200_000
s1 = np.random.randint(low=1, high=1000, size=(n,1))
s2 = np.random.randint(low=1, high=1000, size=(n,1))
bs = 10_000 # batchsize
tot = 0
for i in range(0, n, bs):
for j in range(0, n, bs):
t1 = s1[i:i+bs] + s1[j:j+bs].T
t2 = s2[i:i+bs] + s2[j:j+bs].T
tot += np.sum(t1>t2)
Если вам нужна скорость, вы можете попробовать что-то вроде numba или cython.