gpt4 book ai didi

python - 如何使这个 for 循环更快?

转载 作者:太空宇宙 更新时间:2023-11-04 04:18:28 27 4
gpt4 key购买 nike

我知道与其他语言相比,python 循环本身相对较慢,但是当使用正确的函数时,它们会变得更快。我有一个名为“声学”的 Pandas 数据框,其中包含超过 1000 万行:

print(acoustics)
timestamp c0 rowIndex
0 2016-01-01T00:00:12.000Z 13931.500000 8158791
1 2016-01-01T00:00:30.000Z 14084.099609 8158792
2 2016-01-01T00:00:48.000Z 13603.400391 8158793
3 2016-01-01T00:01:06.000Z 13977.299805 8158794
4 2016-01-01T00:01:24.000Z 13611.000000 8158795
5 2016-01-01T00:02:18.000Z 13695.000000 8158796
6 2016-01-01T00:02:36.000Z 13809.400391 8158797
7 2016-01-01T00:02:54.000Z 13756.000000 8158798

还有我写的代码:

acoustics = pd.read_csv("AccousticSandDetector.csv", skiprows=[1])
weights = [1/9, 1/18, 1/27, 1/36, 1/54]
sumWeights = np.sum(weights)
deltaAc = []
for i in range(5, len(acoustics)):
time = acoustics.iloc[i]['timestamp']
sum = 0
for c in range(5):
sum += (weights[c]/sumWeights)*(acoustics.iloc[i]['c0']-acoustics.iloc[i-c]['c0'])
print("Row " + str(i) + " of " + str(len(acoustics)) + " is iterated")
deltaAc.append([time, sum])

deltaAc = pd.DataFrame(deltaAc)

这需要大量时间,我怎样才能让它更快?

最佳答案

您可以使用 diff来自 pandas 并为数组中的每一行创建所有差异,然后乘以您的 weigths 最后在轴 1 上 sum,例如:

deltaAc = pd.DataFrame({'timestamp': acoustics.loc[5:, 'timestamp'], 
'summation': (np.array([acoustics.c0.diff(i) for i in range(5) ]).T[5:]
*np.array(weights)).sum(1)/sumWeights})

你得到的值与我用你的代码得到的值相同:

print (deltaAc)
timestamp summation
5 2016-01-01T00:02:18.000Z -41.799986
6 2016-01-01T00:02:36.000Z 51.418728
7 2016-01-01T00:02:54.000Z -3.111184

关于python - 如何使这个 for 循环更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54986640/

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