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()进行操作。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昊虹AI笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值