python - 如何将非矢量化 for 循环转换为矢量化格式?
问题描述
我正在尝试将for 循环(如下)转换为矢量化格式,以提高计算速度。
a1、b1 和 c1 的值都是常数。
如何将 for 循环转换为矢量化格式?
笔记:
虽然我知道将 for 循环转换为矢量化格式会提高效率,但我希望通过更改 while 和 for 循环来进一步提高速度
我将不胜感激任何可以提供将非矢量化代码转换为矢量化的背景的阅读材料(或其他资源)
T = np.zeros((int(time/dt)+2, N+1)) #setting up Temperature - Position array n = 0 #setting position equal to 0 (initial position) # Initial Condition T[n, :] = T0 #setting T = T0 at t=0 for all positions (initial temperature array) # Boundary Condition T[:, 0] = T_in #setting all times at n=0 to inlet fluid temperature while t <= time: #running simulation until required simulation time for i in range(1,N): #solving for temperature at every increment T[n+1,i] = T[n,i] + a1*T[n,i+1] - b1*T[n,i] + c1*T[n,i-1] #using three nodes (i-1,i,i+1) at time n to solve for #temperature at n+1, position i T[n+1,-1] = T[n+1,-2] #setting final position temperature equal to second last temperature T[n+1, 0] = T_in #resetting position 0 as inlet fluid temperature n = n + 1 #incrementing position t = t + dt #incrementing time
解决方案
你可以试试这个:
T = np.empty((int(time / dt), N + 1)) #setting up Temperature - Position array
# Initial Condition
T[0, :] = T0
# Boundary Condition
T[:, 0] = T_in
for n in range(0, T.shape[0] - 1):
T[n + 1, 1:N] = c1 * T[n, :N - 1] + (1 - b1) * T[n, 1:N] + a1 * T[n, 2:]
T[n + 1, -1] = T[n + 1, -2]
不需要while
循环。数组的行数T
是以这样的方式选择的,t <= time
当你遍历这个数组的所有行时,条件将得到满足。我没有看到避免剩余for
循环的简单方法,因为您正在递归地计算每一行。
推荐阅读
- wso2 - WSO2:IS 和 APIM 集成
- sas - 只要没有从外部文件读取的匹配输入,INFILE 就会停止数据步骤
- javascript - 如何在 React js 应用程序中实现 mixitup js 库
- netlogo - NetLogo 文件读取问题
- iframe - 停止 iframe 发出请求
- c - 如何使用 execl("/usr/bin/open"...) 在 macOS 中重新启动当前程序?
- azure - 具有 Servicebus 绑定异常的 Azure 函数
- c# - 当一个对象成为 syncronizationContext 的一个属性时?
- bootstrap-4 - 获取 boostrap 位置固定类以在较小的断点上消失
- python - 基于列值合并数据框