python扩展库numpy中函数meshgrid()的使用[当你想要两个for循环嵌套处理时,就该想到它]
Posted 昊虹算法
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python扩展库numpy中函数meshgrid()的使用[当你想要两个for循环嵌套处理时,就该想到它]相关的知识,希望对你有一定的参考价值。
看一个简单的例子:
设有一个3阶方阵Z,
其值由式子x^2 + y^2生成。
x的取值为4,5,6;
y的取值为7,8,9。
按常规的思路应该是由两个循环生成方阵Z,即如下的代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 对这篇博文或该程序有不明白的可以加微信/QQ 2487872782交流
import numpy as np
Z = np.zeros((3, 3), np.int)
x = np.array([4, 5, 6])
y = np.array([7, 8, 9])
for i in range(0, 3):
for j in range(0, 3):
Z[i, j] = x[i]**2 + y[j]**2
生成的Z矩阵如下:
这种情况下,我们就可以用函数meshgrid()的来简化代码并加速程序运行速度了。
当我们用函数meshgrid()后,代码就清爽了,如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 对这篇博文或该程序有不明白的可以加微信/QQ 2487872782交流
import numpy as np
x = np.array([4, 5, 6])
y = np.array([7, 8, 9])
X, Y = np.meshgrid(x, y)
Z_2 = X**2 + Y**2
生成的Z_2矩阵如下:
可见结果是一样的。
在使用了函数meshgrid()后,
①去掉了嵌套的两个for循环,我们知道,for循环的嵌套是很消耗运算资源的,在DSP(数字信号处理)中,为了提高运行速度,我们往往要对for循环进行精简。
②简化了代码,避免代码出错,也减少了我们程序员的工作量。
接下来说meshgrid()对向量进行了怎样的操作?
下面这张图说得很明白:
大家重点看我画红框中的两个矩阵,即图中的矩阵xv和矩阵yv,这是它们的生成的示意图。
一个简单的实例更有利于大家理解:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 对这篇博文或该程序有不明白的可以加微信/QQ 2487872782交流
import numpy as np
x = np.array([4, 5, 6])
y = np.array([7, 8])
X, Y = np.meshgrid(x, y)
运行结果如下:
可见,矩阵X和矩阵Y的确是按照示意图中生成的。
具体的细节这篇博文就不多说了,多说反而不利于大家理解。
总结一下:
当两个向量中的元素分别遍历作运算然后生成一个新的矩阵时,一定不要忘了用函数meshgrid()简化代码。当你要用两个for循环的嵌套时,你先要想想能不能用函数meshgrid()进行操作。
以上是关于python扩展库numpy中函数meshgrid()的使用[当你想要两个for循环嵌套处理时,就该想到它]的主要内容,如果未能解决你的问题,请参考以下文章
Python基础:Numpy函数介绍:Meshgrid,mgrid,append等
Python基础:Numpy函数介绍:Meshgrid,mgrid,append等