meshgrid的目的是生成两套行列数一致的矩阵,其中一个是行重复,一个是列复制;可以这么来理解,通过ravel()将矩阵数据拉平之后,就可以将这两套矩阵累加在一起,形成一个两行数据,要达到这个效果是需要行列相同,这样就能够理解meshgrid行为了。
  比如下面的数据,是原始的两个数组:
  t01: array([1., 2., 3.])
  t02: array([4., 5.])
  经过了一些meshgrid的处理之后,形成了两个矩阵:
  ++++++++++++ t1 ++++++++++++
  array([[1., 2., 3.],
  [1., 2., 3.]])
  ++++++++++++ t2 ++++++++++++
  array([[4., 4., 4.],
  [5., 5., 5.]])
  那么为什么需要meshgrid呢?目的就是为下面的num.c_和numpy.r_操作做准备(至少很多时候是这样的)。前者用于将数据进行纵切(多用于生成二元组,比如坐标等),后者用于将数据拉成一行。
  继续我们刚才的数据:
  在进行numpy的c_和p_之前要通过ravel进行拉平(和flatten功能类似)。
  ++++++++++++t1.ravel()++++++++++++
  array([1., 2., 3., 1., 2., 3.])
  ++++++++++++t2.ravel()++++++++++++
  array([4., 4., 4., 5., 5., 5.])
  观察一下np.c_的处理结果,你会发现其实就是将拉平为两行的数据,进行纵切,将纵切的每列元素进行合并:
  ++++++++++++np.c_[t1.ravel(), t2.ravel()]++++++++++++
  array([[1., 4.],
  [2., 4.],
  [3., 4.],
  [1., 5.],
  [2., 5.],
  [3., 5.]])
  下面是np.r_的操作,其实就是将两个矩阵,进行横切,然后合并(合并为一行了)。

  其实,并不这么简单,其实如果你再一次看一下数据的组合,你会发现,这两组数据各自组合了一次,1和4,5组合了,2和4,5组合,3和4,5组合;所有的数据之间都进行组合;meshgrid很多的场景都是用在获取整个平面均匀的点,一般都是通过np.linspace来搞定的X轴,y轴均匀的点;然后对于这些点利用meshgrid,np.c_以及ravel函数,是的这些点之间形成各种组合,获取一个比较全面的点集,点集覆盖了整个平面;

  ++++++++++++np.r_[t1.ravel(), t2.ravel()]++++++++++++
  [1. 2. 3. 1. 2. 3. 4. 4. 4. 5. 5. 5.]
  还有稍微复杂一些的情况,如果你操作的直接就是向量,要注意,你操作的是向量,一组数据作为一个元素:
  ++++++++++++np.c_[np.array([[1,2,3]]), np.array([[4,5,6]])]++++++++++++
  [[1 2 3 4 5 6]]
  结果是对的,因为还是纵切,但是切出了还是纵向的两个元素[[123]],[[456]],然后进行合并于是有了[[123456]]。
  关于c_:
  ++++++++++++np.r_[np.array([[1,2,3]]), np.array([[4,5,6]])]++++++++++++
  [[1 2 3]
  [4 5 6]]

  代码如下:
  

 t01 = np.linspace(1, 3, 3)
t02 = np.linspace(4, 5, 2)
pprint(t01)
pprint(t02) t1, t2= np.meshgrid(t01, t02)
print("++++++++++++ t1 ++++++++++++")
pprint(t1)
print("++++++++++++ t2 ++++++++++++")
pprint(t2) t = np.c_[t1.ravel(), t2.ravel()]
print("++++++++++++t1.ravel()++++++++++++")
pprint(t1.ravel())
print("++++++++++++t2.ravel()++++++++++++")
pprint(t2.ravel())
print("++++++++++++np.c_[t1.ravel(), t2.ravel()]++++++++++++")
pprint(t) print('++++++++++++np.r_[t1.ravel(), t2.ravel()]++++++++++++')
t3=np.r_[t1.ravel(), t2.ravel()]
print(t3) t4 = np.c_[np.array([[1,2,3]]), np.array([[4,5,6]])]
print('++++++++++++np.c_[np.array([[1,2,3]]), np.array([[4,5,6]])]++++++++++++')
print(t4) t5 = np.r_[np.array([[1,2,3]]), np.array([[4,5,6]])]
print('++++++++++++np.r_[np.array([[1,2,3]]), np.array([[4,5,6]])]++++++++++++')
print(t5)

输出:
array([1., 2., 3.])
array([4., 5.])
++++++++++++ t1 ++++++++++++
array([[1., 2., 3.],
[1., 2., 3.]])
++++++++++++ t2 ++++++++++++
array([[4., 4., 4.],
[5., 5., 5.]])
++++++++++++t1.ravel()++++++++++++
array([1., 2., 3., 1., 2., 3.])
++++++++++++t2.ravel()++++++++++++
array([4., 4., 4., 5., 5., 5.])
++++++++++++np.c_[t1.ravel(), t2.ravel()]++++++++++++
array([[1., 4.],
[2., 4.],
[3., 4.],
[1., 5.],
[2., 5.],
[3., 5.]])
++++++++++++np.r_[t1.ravel(), t2.ravel()]++++++++++++
[1. 2. 3. 1. 2. 3. 4. 4. 4. 5. 5. 5.]

++++++++++++np.c_[np.array([[1,2,3]]), np.array([[4,5,6]])]++++++++++++
[[1 2 3 4 5 6]]
++++++++++++np.r_[np.array([[1,2,3]]), np.array([[4,5,6]])]++++++++++++
[[1 2 3]
[4 5 6]]

关于meshgrid和numpy.c_以及numpy.r_的更多相关文章

  1. numpy中np.c_和np.r_

    np.r_:按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等,类似于pandas中的concat() np.c_:按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等,类似于pandas中的mer ...

  2. np.c_与np.r_

    import sys reload(sys) sys.setdefaultencoding('utf-8') import numpy as np def test(): ''' numpy函数np. ...

  3. python 中range numpy.arange 和 numpy.linspace 的区别

    1.返回值不同 range返回一个range对象,numpy.arange和numpy.linspace返回一个数组. 2.np.arange的步长可以为小数,但range的步长只能是整数. 与Pyt ...

  4. numpy.random.random & numpy.ndarray.astype & numpy.arange

    今天看到这样一句代码: xb = np.random.random((nb, d)).astype('float32') #创建一个二维随机数矩阵(nb行d列) xb[:, 0] += np.aran ...

  5. Python的工具包[0] -> numpy科学计算 -> numpy 库及使用总结

    NumPy 目录 关于 numpy numpy 库 numpy 基本操作 numpy 复制操作 numpy 计算 numpy 常用函数 1 关于numpy / About numpy NumPy系统是 ...

  6. python numPy模块 与numpy里的数据类型、数据类型对象dtype

    学习链接:http://www.runoob.com/numpy/numpy-tutorial.html 官方链接:https://numpy.org/devdocs/user/quickstart. ...

  7. python numpy.shape 和 numpy.reshape函数

    导入numpy模块   from numpy import *   import numpy as np ############################################### ...

  8. numpy.stack和numpy.concatenate的区别

    在使用numpy进行矩阵运算的时候踩到的坑,原因是不能正确区分numpy.concatenate和numpy.stack在功能上的差异. 先说numpy.concatenate,直接看文档: nump ...

  9. python中numpy.r_和numpy.c_

    例子 import numpy as np a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) c = np.c_[a,b] print(np.r_[a,b ...

随机推荐

  1. ios手动添加数组字典(NSMutableDictionary)

    @property (nonatomic,strong) NSArray *imageData;//定义一个数组 -(NSArray *)imageDate { if(_imageDate==nil) ...

  2. python 字典,列表,集合,字符串,基础进阶

    python列表基础 首先当然是要说基础啦 列表list 1.L.append(object) -> None 在列表末尾添加单个元素,任何类型都可以,包括列表或元组等 2.L.extend(i ...

  3. Java虚拟机的组成

    Java虚拟机主要分为以下五个区: 一.方法区: 1. 有时候也成为永久代,在该区内很少发生垃圾回收,但是并不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和对类型的卸载 2. 方法区主要用 ...

  4. 性能测试-11.Linux服务器使用NMON监控指标

    一.NMON使用 首先下载nmon软件http://nmon.sourceforge.net/pmwiki.php?n=Site.Download,打开这个网站下载符合自己操作系统的硬件的相关nmon ...

  5. 大数据-10-Spark入门之支持向量机SVM分类器

    简介 支持向量机SVM是一种二分类模型.它的基本模型是定义在特征空间上的间隔最大的线性分类器.支持向量机学习方法包含3种模型:线性可分支持向量机.线性支持向量机及非线性支持向量机.当训练数据线性可分时 ...

  6. [转]An Intuitive Explanation of Convolutional Neural Networks

    An Intuitive Explanation of Convolutional Neural Networks https://ujjwalkarn.me/2016/08/11/intuitive ...

  7. threejs教程

    http://www.haomou.net/2015/08/30/2015_threejs0/ http://www.johannes-raida.de/tutorials.htm https://w ...

  8. C#读取文件夹下所有指定类型,并返回相应类型数据

    C#读取文件夹下所有文件 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...

  9. inner join 与一般笛卡尔积的区别

    inner join 与一般笛卡尔积的区别:inner join是笛卡尔积的特殊形式.如果有表a和表b,表a有m条记录,表b有n条记录,则一般笛卡尔积后得到的记录条数是m*n条,记录之间的组合是随意的 ...

  10. HPU第四次积分赛-L:A Winged Steed(完全背包)

    A Winged Steed 描述 有n种千里马,每一种都有若干匹,第i种马的颜值ai​,价格di​.现有m个牧马人要去挑选千里马,每一位牧马人对马的颜值都有要求:{所选马的颜值总和} ⩾Ai​.现在 ...