python - 有什么方法可以加快循环(numpy 或 pandas)中的依赖迭代,如矢量化?
问题描述
我有一个以 pandas 数据框或 numpy 数组作为输入的模型。该模型在循环中迭代行,当前行计算取决于上一步。有什么方法可以在其中加入 numpy vectorize 吗?或任何其他使代码运行得更快的方法。我有很大的投入,速度的任何改进都可以节省大量时间。下面是一个示例代码供参考。NUMpy 输入提高了 pandas 数据帧输入的速度。任何建议都受到高度赞赏。
import pandas as pd
import numpy as np
inp1 = pd.DataFrame(np.random.rand(5,5))
inp2 = pd.DataFrame(np.random.rand(5,5))
outp1 = pd.DataFrame(np.zeros(inp1.shape, dtype = float),
index = inp1.index, columns = inp1.columns)
def sample_code_pandas(params):
aa, bb, lmt = params
outp1[inp2 < lmt] = inp1[inp2 < lmt]
out_pr = outp1.iloc[0,:]
for i in range(1, len(outp1)):
rates = ((inp1.iloc[i,:] - aa) / (aa - bb))
outp1.iloc[i,:] = inp1.iloc[i,:] * rates - out_pr
out_pr = outp1.iloc[i,:]
return outp1
%timeit sample_code_pandas((-0.2, -0.5, 0 ))
#******************************************************
inp1 = np.random.rand(5,5)
inp2 = np.random.rand(5,5)
outp1 = np.zeros(inp1.shape, dtype = float)
def sample_code_numpy(params):
aa, bb, lmt = params
outp1[inp2 < lmt] = inp1[inp2 < lmt]
out_pr = outp1[0]
for i in range(1, len(outp1)):
rates = ((inp1[i] - aa) / (aa - bb))
outp1[i] = inp1[i] * rates - out_pr
out_pr = outp1[i]
return outp1
%timeit sample_code_numpy((-0.2, -0.5, 0 ))
解决方案
推荐阅读
- mysql - 在mysql中显示空白表
- angular - 一个一个地删除动态创建的组件?
- c# - 添加复合键后重复键值违反唯一约束“PK_ProductsComparsion
- r - 具有反应性的简单 R 传单地图 - 不工作 - 尝试了一切
- jpa - 如何使用 Spring Data JPA 创建全文索引?
- android - 退出地图导航并单击恢复 Xamarin Forms Android 应用程序
- google-cloud-firestore - 将 ESP32 连接到 Google Cloud IoT Core(使用 Google Cloud IoT Device SDK 和 ESP-IDF)
- powershell - 使用 PowerShell 在 cmd.exe 中运行命令
- javascript - 从 chrome 扩展名中的另一个文件调用 javascript 函数
- java - withEndAction 并不总是触发