Замена оси нисходящих баров в numpy - PullRequest
0 голосов
/ 25 января 2020

У меня есть массив numpy натуральных чисел, например:

inp = np.array([8,2,7,6,1,6,1,4,8,2,1,6,5])

Я хочу создать новый numpy массив [f(1), f(2), f(3),...], где f(n) вычисляет, сколько значений inp не превышает n. Нулевые значения f(n) игнорируются. В этом конкретном случае c мой ожидаемый результат:

out = np.array([13,10,8,8,7,6,3,2])

Я попытался зациклить:

[len(inp[inp>=i]) for i in range(1, max(inp)+1)] 

, но это неэффективно. Как я могу сделать это, используя numpy методы?

1 Ответ

1 голос
/ 25 января 2020

Кажется, вы можете просто использовать np.bincount -

In [17]: len(inp)-np.bincount(inp).cumsum()[:-1]
Out[17]: array([13, 10,  8,  8,  7,  6,  3,  2])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...