gpt4 book ai didi

python - 使 numpy 数组单调,无需 Python 循环

转载 作者:太空宇宙 更新时间:2023-11-03 21:44:43 25 4
gpt4 key购买 nike

我有一个一维值数组,它应该是单调的(假设是递减),但存在随机区域,其中值随着索引而增加。

我需要一个数组,其中每个区域都替换为紧邻其前面的值,以便对结果数组进行排序。

所以如果给定的数组是:

a = np.array([10.0, 9.5, 8.0, 7.2, 7.8, 8.0, 7.0, 5.0, 3.0, 2.5, 3.0, 2.0])

我想要的结果是

b = np.array([10.0, 9.5, 8.0, 7.2, 7.2, 7.2, 7.0, 5.0, 3.0, 2.5, 2.5, 2.0])

这是一个图形表示:

example

我知道如何使用 Python 循环来实现它,但是有没有办法使用 NumPy 机器来实现这一点?

为了清晰起见,Python 代码:

b = np.array(a)
for i in range(1, b.size):
if b[i] > b[i-1]:
b[i] = b[i-1]

最佳答案

您可以使用np.minimum.accumulate在数组中移动时收集最小值:

>>> np.minimum.accumulate(a)
array([ 10. , 9.5, 8. , 7.2, 7.2, 7.2, 7. , 5. , 3. ,
2.5, 2.5, 2. ])

对于数组中的每个元素,此函数返回迄今为止看到的最小值。

如果您希望数组单调递增,您可以使用np.maximum.accumulate

NumPy 中的许多其他通用函数都有 accumulate方法来模拟循环遍历数组,将函数应用于每个元素并将返回值收集到相同大小的数组中。

关于python - 使 numpy 数组单调,无需 Python 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52581855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com