在numpy数组中,如何对比当前最大值小的数进行矢量化计数?

2024-04-20 13:31:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力学习更多关于numpy的知识,我希望能够使用矢量化来实现更复杂的函数。例子: 写一个函数,从numpy数组的左侧到右侧,对小于当前值的所有数字进行计数。 如果我必须在内置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数组上实现吗?你知道吗


Tags: 函数numpyvaluecount数字数组resultcurrent
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

可以将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

相关问题 更多 >