gpt4 book ai didi

python - 基于移位值/递归算法的级数计算

转载 作者:太空宇宙 更新时间:2023-11-04 02:14:46 24 4
gpt4 key购买 nike

我有以下内容:

df['PositionLong'] = 0
df['PositionLong'] = np.where(df['Alpha'] == 1, 1, (np.where(np.logical_and(df['PositionLong'].shift(1) == 1, df['Bravo'] == 1), 1, 0)))

这行基本上只接受 df['Alpha'] 而不是 df['PositionLong'].shift(1).. 它不能识别它但我不明白为什么?

它产生这个:

df['Alpha']  df['Bravo']   df['PositionLong']
0 0 0
1 1 1
0 1 0
1 1 1
1 1 1

但是我想要代码做的是这样的:

df['Alpha']  df['Bravo']   df['PositionLong']
0 0 0
1 1 1
0 1 1
1 1 1
1 1 1

我相信解决方案是循环每一行,但这会花费很长时间。

你能帮帮我吗?

最佳答案

您正在寻找一个递归函数,因为先前的PositionLong 值取决于Alpha,它本身用于确定 PositionLong.

但是 numpy.where 是一个常规函数,所以 df['PositionLong'].shift(1) 被评估为一系列 0 值,因为您使用 0 初始化系列。

手动循环不一定很昂贵。您可以使用 numba有效地实现你的递归算法:

from numba import njit

@njit
def rec_algo(alpha, bravo):
res = np.empty(alpha.shape)
res[0] = 1 if alpha[0] == 1 else 0
for i in range(1, len(res)):
if (alpha[i] == 1) or ((res[i-1] == 1) and bravo[i] == 1):
res[i] = 1
else:
res[i] = 0
return res

df['PositionLong'] = rec_algo(df['Alpha'].values, df['Bravo'].values).astype(int)

结果:

print(df)

Alpha Bravo PositionLong
0 0 0 0
1 1 1 1
2 0 1 1
3 1 1 1
4 1 1 1

关于python - 基于移位值/递归算法的级数计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52902568/

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