学习Pthony中的机器学习和数据分析中的numpy.meshgrid()和numpy.linspace理解

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()

学习Pthony中的机器学习和数据分析中的numpy.meshgrid()和numpy.linspace理解
图上的6个网格点,坐标如图,如何用矩阵形式(坐标矩阵)来批量描述这些点的坐标呢?
答案如下:学习Pthony中的机器学习和数据分析中的numpy.meshgrid()和numpy.linspace理解

这就是坐标矩阵——横坐标矩阵XXX中的每个元素,与纵坐标矩阵YYY中对应位置元素,共同构成一个点的完整坐标。如B点坐标学习Pthony中的机器学习和数据分析中的numpy.meshgrid()和numpy.linspace理解
用法:
  [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;

学习Pthony中的机器学习和数据分析中的numpy.meshgrid()和numpy.linspace理解

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()

学习Pthony中的机器学习和数据分析中的numpy.meshgrid()和numpy.linspace理解
可以关注公众号:Python课堂笔记

上一篇:《精品毕设》java ssm springboot网上蛋糕商城项目完整源码+论文


下一篇:matlab中meshgrid