1、meshgrid()函数解析
meshgrid翻译:网格。可以这么理解,meshgrid函数用两个坐标轴上的点在平面上画网格。
什么是网格可以看下面的图:
简单案例:
import numpy as np
import matplotlib.pyplot as plt
x = np.array([[0, 1, 2], [0, 1, 2]])
y = np.array([[0, 0, 0], [1, 1, 1]])
plt.plot(x, y,
color='red', # 全部点设置为红色
marker='.', # 点的形状为圆点
linestyle='') # 线型为空,也即点与点之间不用线连接
plt.grid(True)
plt.show()
图上的6个网格点,坐标如图,如何用矩阵形式(坐标矩阵)来批量描述这些点的坐标呢?
答案如下:
这就是坐标矩阵——横坐标矩阵XXX中的每个元素,与纵坐标矩阵YYY中对应位置元素,共同构成一个点的完整坐标。如B点坐标
用法:
[X,Y]=meshgrid(xgv,ygv)
meshgrid函数生成的X,Y是大小相等的矩阵,xgv,ygv是两个网格矢量,xgv,ygv都是行向量。
X:通过将xgv复制length(ygv)行(严格意义上是length(ygv)-1行)得到
Y:首先对ygv进行转置得到ygv’,将ygv’复制(length(xgv)-1)次得到。
例如:
[X,Y] = meshgrid(1:3,10:14)
X =
1 2 3
1 2 3
1 2 3
1 2 3
1 2 3
Y =
10 10 10
11 11 11
12 12 12
13 13 13
14 14 14
[X,Y]=meshgrid(xgv)与[X,Y]=meshgrid(xgv,xgv)是等同的
例如:
[X,Y]=meshgrid(1:3)
X =
1 2 3
1 2 3
1 2 3
Y =
1 1 1
2 2 2
3 3 3
[X,Y,Z]=meshgrid(xgv,ygv,zgv)生成三维数组,可用来计算三变量的函数和绘制三维立体图这里,主要以[X,Y]=meshgrid(xgv,ygv)为例,来对该函数进行介绍。
[X,Y] = meshgrid(xgv,ygv) 将向量x和y定义的区域转换成矩阵X和Y,其中矩阵X的行向量是向量x的简单复制,而矩阵Y的列向量是向量y的简单复制(注:下面代码中X和Y均是数组,在文中统一称为矩阵了)。
假设x是长度为m的向量,y是长度为n的向量,则最终生成的矩阵X和Y的维度都是 nm (注意不是mn)。
绘制函数f(x,y)=e(-x2-y^2)的表面图
clc;clear;close all;
[X,Y]=meshgrid(-2:0.1:2,-2:0.1:2);
Z=exp(-X.^2-Y.^2);
mesh(X,Y,Z);%线框图
figure();
surf(X,Y,Z);%表面图
% shading interp;
2、linspace()函数解析
numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
在指定的间隔范围内返回均匀间隔的数字。
在[start, stop]范围内计算,返回num个(默认为50)均匀间隔的样本。
可以选择性地排除间隔的终点。
**Parameters**参数
start [scalar] 返回序列的初始值。
stop [scalar] 除非endpoint被设置为False,否则stop为序列的终点值。当endpoint=False,返回序列包含num+1个均匀间隔样本的最后一个样本以外的所有样本(原文:the sequence consists of all but the last of num + 1 evenly spaced samples。理解为:[start, stop]均匀分割为包含num+1个样本的序列,最后一个样本即为endpoint,舍弃不取,即为返回的序列,其中样本总数仍然为num),故stop是被排除在外的。值得注意的是,当endpoint=False时,返回序列的步长会发生变化。
num [int, optional] 产生的样本总数。默认值为50。必须为非负值。
endpoint [bool, optional] 若为True,则stop为最后一个样本。否则,返回序列不包含stop。默认值为True。
retstep [bool, optional] 若为True,返回(samples, step),step为样本间的步长。
dtype [dtype, optional] 返回序列的数据类型。如果dtype未给定,那么从其他输入参数推断其类型。
Returns
samples [ndarray] 包含num个等间隔样本的闭区间[start, stop]或者左闭右开区间[start, stop)(区间右端的开闭基于endpoint为True或者False)。
step [float, optional] 仅当retstep设置为True时返回,样本的步长。
案例:
import numpy as np
import matplotlib.pyplot as plt
N = 8
y = np.zeros(N)
x1 = np.linspace(0, 10, N, endpoint=True)
x2 = np.linspace(0, 10, N, endpoint=False)
plt.plot(x1, y, 'o')
plt.plot(x2, y + 0.5, 'o')
plt.ylim([-0.5, 1])
plt.show()
可以关注公众号:Python课堂笔记