python – 如何在Numpy中向量化这个double for循环?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何在Numpy中向量化这个double for循环?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含969字,纯文字阅读大概需要2分钟。
内容图文
![python – 如何在Numpy中向量化这个double for循环?](/upload/InfoBanner/zyjiaocheng/770/41f7d983348a4afc9d5f073886b97227.jpg)
我有一些运行缓慢的Python / Numpy代码,我认为这是因为使用了双循环.这是代码.
def heat(D,u0,q,tdim):
xdim = np.size(u0)
Z = np.zeros([xdim,tdim])
Z[:,0]=u0;
for i in range(1,tdim):
for j in range (1,xdim-1):
Z[j,i]=Z[j,i-1]+D*q*(Z[j-1,i-1]-2*Z[j,i-1]+Z[j+1,i-1])
return Z
我试图删除双循环和矢量化Z.这是我的尝试.
def heat(D,u0,q,tdim):
xdim = np.size(u0)
Z = np.zeros([xdim,tdim])
Z[:,0]=u0;
Z[1:,1:-1]=Z[1:-1,:-1]+D*q*(Z[:-2,:-1]-2*Z[1:-1,:-1]+Z[2:,:-1])
return Z
这不起作用 – 我收到以下错误:
operands could not be broadcast together with shapes (24,73) (23,74)
所以在试图对Z进行矢量化时,我搞砸了.你能帮我看看我的错误吗?
解决方法:
您无法在问题的时间维度中对扩散计算进行矢量化,这仍然需要循环.这里唯一明显的优化是通过调用numpy.diff函数(预编译的C)替换拉普拉斯算法,因此您的热方程求解器变为:
def heat(D,u0,q,tdim):
xdim = np.size(u0)
Z = np.zeros([xdim,tdim])
Z[:,0]=u0;
for i in range(1,tdim):
Z[1:-1,i]=Z[1:-1,i-1] + D*q*np.diff(Z[:,i-1], 2)
return Z
对于非平凡的空间大小,您应该看到相当快的速度.
内容总结
以上是互联网集市为您收集整理的python – 如何在Numpy中向量化这个double for循环?全部内容,希望文章能够帮你解决python – 如何在Numpy中向量化这个double for循环?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。