gpt4 book ai didi

python - 在numpy数组中没有for循环的迭代

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

我需要对 numpy 数组进行逻辑迭代,它的值取决于其他数组的元素。我在下面编写了代码来澄清我的问题。在没有 for 循环的情况下解决这个问题的任何建议?

Code
a = np.array(['a', 'b', 'a', 'a', 'b', 'a'])
b = np.array([150, 154, 147, 126, 148, 125])
c = np.zeros_like(b)
c[0] = 150
for i in range(1, c.size):
if a[i] == "b":
c[i] = c[i-1]
else:
c[i] = b[i]

最佳答案

这是一种结合使用 np.maximum.accumulate 的方法和 np.where创建以特定间隔停止的阶梯式索引,然后简单地索引到b 将为我们提供所需的输出。

因此,一个实现将是 -

mask = a!="b"
idx = np.maximum.accumulate(np.where(mask,np.arange(mask.size),0))
out = b[idx]

分步运行示例 -

In [656]: # Inputs 
...: a = np.array(['a', 'b', 'a', 'a', 'b', 'a'])
...: b = np.array([150, 154, 147, 126, 148, 125])
...:

In [657]: mask = a!="b"

In [658]: mask
Out[658]: array([ True, False, True, True, False, True], dtype=bool)

# Crux of the implmentation happens here :
In [696]: np.where(mask,np.arange(mask.size),0)
Out[696]: array([0, 0, 2, 3, 0, 5])

In [697]: np.maximum.accumulate(np.where(mask,np.arange(mask.size),0))
Out[697]: array([0, 0, 2, 3, 3, 5])# Stepped indices "intervaled" at masked places

In [698]: idx = np.maximum.accumulate(np.where(mask,np.arange(mask.size),0))

In [699]: b[idx]
Out[699]: array([150, 150, 147, 126, 126, 125])

关于python - 在numpy数组中没有for循环的迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41244836/

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