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等

Numpy中Meshgrid函数介绍及2种应用场景

Numpy中Meshgrid函数介绍及2种应用场景

python中的linspace,meshgrid,concatenate函数

numpy的生成网格矩阵 meshgrid()