我试图学习有关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数组上实现它?
答案 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)
您可以将unique与maximum.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