python - NumPy 用乘法和加法代替 for 循环
问题描述
(蟒蛇2)
我的for循环是这个
vx2=[]
vy2=[]
vz2=[]
for xn in range(0,npoints-2):
vx11=vx1[xn]+.5*(fxxx_list[xn]+fxxx_list[xn+1])*dt
vy11=vy1[xn]+.5*(fxxx_list[xn]+fxxx_list[xn+1])*dt
vz11=vz1[xn]+.5*(fxxx_list[xn]+fxxx_list[xn+1])*dt
vx2.append(vx11)
vy2.append(vy11)
vz2.append(vz11)
print vx2, vy2, vz2
我的教授。告诉我我可以通过仅对 Numpy 数组进行操作来替换我的 for 循环来加快速度,但我发现在同一个 Numpy 函数中相乘非整数和相加/相乘效率低下。有没有一种优雅的方式来使用 Numpy 而不是 for 循环来编写这个?
我已经尝试过这个:
#number of iterations
xn=n1[0:998]
array=np.array(xn)
vxn=vx1[0:998]
vyn=vy1[0:998]
vzn=vz1[0:998]
vvv=np.multiply((dt),(fxxx_list))
vx2=vxn+vvv
vy2=vyn+vvv
vz2=vzn+vvv
但是我无法让我的算法完全正确,正如你所看到的那样,它有点乱,并且需要与 for 循环一样长的时间。
解决方案
尝试这个:
fxxx_list = np.array(fxxx_list)
vx = np.array([vx1,vy1,vy2])
vx11, vy11, vz11 = vx + (fxxx_list[:-2] + fxxx_list[1:-1])/2 * dt
如果数组 vx1,... 的长度也为 n_points,那么您应该使用
vx = np.array([vx1,vy1,vy2])[:,:-2]
注意:我假设 vx1,... 的长度都相同
推荐阅读
- c++ - 无法找到数组和输出问题的大小
- c - CCStudio 中的示例程序
- javascript - Firestore如何查询趋势文档的帖子集合还是我应该使用数据聚合
- c++ - 如何使用任何 C++ Microsoft API 读取 Dxdiag 的 VramInfo?
- microsoft-graph-api - 有没有办法获取微软团队的录音?
- html - 我在 VS Code 中的 HTML 快捷方式不起作用
- rust - 为什么具有默认值的泛型需要类型注释,而夜间的 Vec 会自动推断其分配器?
- java - 将 setColorFilter 应用于 Android 中的图像
- android - Android WebView 不在棉花糖及以上设备中调用 openFileChooser
- python - 如何将“int64”类型的列转换为日期时间?