Как можно векторизовать подсчет меньших чисел, чем текущий максимум в массиве numpy? - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь узнать больше о numpy, и я хотел бы иметь возможность использовать векторизацию для более сложных функций.Пример: напишите функцию, которая будет идти слева от массива numpy вправо и считать все числа, меньшие current max value.Если бы мне пришлось работать со списком встроенных Python, я бы сделал:

def count_smaller_than_current_max(lst):
    max_value = -1
    result = 0
    for value in lst:
        if value > max_value:
            max_value = value
            result += 1
    return result - 1

Для

>>> count_smaller_than_current_max([1, 2, 3, 5, 4])
3
>>> count_smaller_than_current_max([1, 2, 5, 3, 4])
2

Есть идеи, как это сделать на массиве NumPy с векторизацией?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Вы можете использовать уникальный вместе с максимум.аккумулировать :

import numpy as np

print(len(np.unique(np.maximum.accumulate([1, 2, 3, 5, 4]))) - 1)
print(len(np.unique(np.maximum.accumulate([1, 2, 5, 3, 4]))) - 1)

Выход

3
2
0 голосов
/ 28 ноября 2018

Рассчитайте накопленный максимум и затем сравните его с a:

import numpy as np

a = np.array([1,2,3,5,4])
(a[1:] > np.maximum.accumulate(a)[:-1]).sum()
# 3

a = np.array([1,2,5,3,4])
(a[1:] > np.maximum.accumulate(a)[:-1]).sum()
# 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...