关于meshgrid和numpy.c_以及numpy.r_

Posted xiashiwendao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于meshgrid和numpy.c_以及numpy.r_相关的知识,希望对你有一定的参考价值。

  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_的操作,其实就是将两个矩阵,进行横切,然后合并(合并为一行了)。
  ++++++++++++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]]

  代码如下:
  

 1 t01 = np.linspace(1, 3, 3)
 2 t02 = np.linspace(4, 5, 2)
 3 pprint(t01)
 4 pprint(t02)
 5 
 6 t1, t2= np.meshgrid(t01, t02)
 7 print("++++++++++++ t1 ++++++++++++")
 8 pprint(t1)
 9 print("++++++++++++ t2 ++++++++++++")
10 pprint(t2)
11 
12 t = np.c_[t1.ravel(), t2.ravel()]
13 print("++++++++++++t1.ravel()++++++++++++")
14 pprint(t1.ravel())
15 print("++++++++++++t2.ravel()++++++++++++")
16 pprint(t2.ravel())
17 print("++++++++++++np.c_[t1.ravel(), t2.ravel()]++++++++++++")
18 pprint(t)
19 
20 print(++++++++++++np.r_[t1.ravel(), t2.ravel()]++++++++++++)
21 t3=np.r_[t1.ravel(), t2.ravel()]
22 print(t3)
23 
24 t4 = np.c_[np.array([[1,2,3]]), np.array([[4,5,6]])]
25 print(++++++++++++np.c_[np.array([[1,2,3]]), np.array([[4,5,6]])]++++++++++++)
26 print(t4)
27 
28 t5 = np.r_[np.array([[1,2,3]]), np.array([[4,5,6]])]
29 print(++++++++++++np.r_[np.array([[1,2,3]]), np.array([[4,5,6]])]++++++++++++)
30 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_的主要内容,如果未能解决你的问题,请参考以下文章

numpy meshgrid 和 mgrid 的两个简单实例和解析

绘制分类界面以及性能曲面中的meshgrid函数

通过一个函数对比 mgrid以及meshgrid函数

matlab函数meshgrid的用法详解(生成网格矩阵)和ndgrid的区别及用法

nump库的简单函数介绍

Nump库的基本使用