一个如何计算小于numpy数组中当前最大值的数字?

时间:2018-11-28 19:26:16

标签: python numpy vectorization

我试图学习有关numpy的更多信息,并且希望能够使用矢量化处理更复杂的功能。例: 编写函数,该函数将从numpy数组的左侧移至右侧,并对小于 current 最大值的所有数字进行计数。 如果必须对内置的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 :(得分:2)

计算累积最大值,然后将其与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

答案 1 :(得分:1)

您可以将uniquemaximum.accumulate一起使用:

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