Вы можете изучить np.greater.outer (). Наружный метод уфунка.
import numpy as np
a = np.array([ 4, 2, 3, 1])
Создать квадратный массив с [i]> a [j] для всех i и j
arr = np.greater.outer(a,a)*1
arr
Out[24]:
array([[0, 1, 1, 1],
[0, 0, 0, 1],
[0, 1, 0, 1],
[0, 0, 0, 0]])
Нас интересует только верхний правый треугольник.
arr = np.triu(arr)
arr
Out[25]:
array([[0, 1, 1, 1],
[0, 0, 0, 1],
[0, 0, 0, 1],
[0, 0, 0, 0]])
arr += arr.T # add the transposition. arr is symmetrical about the diagonal.
arr
Out[9]:
array([[0, 1, 1, 1],
[1, 0, 0, 1],
[1, 0, 0, 1],
[1, 1, 1, 0]])
Суммируйте строки, чтобы получить количество.
arr.sum(axis = 0)
Out[28]: array([3, 2, 2, 3])
Все циклы скрыты во внешнем методе.