关于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_的操作,其实就是将两个矩阵,进行横切,然后合并(合并为一行了)。
其实,并不这么简单,其实如果你再一次看一下数据的组合,你会发现,这两组数据各自组合了一次,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_的更多相关文章
- numpy中np.c_和np.r_
np.r_:按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等,类似于pandas中的concat() np.c_:按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等,类似于pandas中的mer ...
- np.c_与np.r_
import sys reload(sys) sys.setdefaultencoding('utf-8') import numpy as np def test(): ''' numpy函数np. ...
- python 中range numpy.arange 和 numpy.linspace 的区别
1.返回值不同 range返回一个range对象,numpy.arange和numpy.linspace返回一个数组. 2.np.arange的步长可以为小数,但range的步长只能是整数. 与Pyt ...
- numpy.random.random & numpy.ndarray.astype & numpy.arange
今天看到这样一句代码: xb = np.random.random((nb, d)).astype('float32') #创建一个二维随机数矩阵(nb行d列) xb[:, 0] += np.aran ...
- Python的工具包[0] -> numpy科学计算 -> numpy 库及使用总结
NumPy 目录 关于 numpy numpy 库 numpy 基本操作 numpy 复制操作 numpy 计算 numpy 常用函数 1 关于numpy / About numpy NumPy系统是 ...
- python numPy模块 与numpy里的数据类型、数据类型对象dtype
学习链接:http://www.runoob.com/numpy/numpy-tutorial.html 官方链接:https://numpy.org/devdocs/user/quickstart. ...
- python numpy.shape 和 numpy.reshape函数
导入numpy模块 from numpy import * import numpy as np ############################################### ...
- numpy.stack和numpy.concatenate的区别
在使用numpy进行矩阵运算的时候踩到的坑,原因是不能正确区分numpy.concatenate和numpy.stack在功能上的差异. 先说numpy.concatenate,直接看文档: nump ...
- 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 ...
随机推荐
- Alpha冲刺3
前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/9971198.html 作业博客:https://edu.cnblogs.com/campus/ ...
- php优秀框架codeigniter学习系列——constants.php
该文件位于application/config/constants.php.
- django中scrf的实现机制
第一步:django第一次响应来自某个客户端的请求时,后端随机产生一个token值,把这个token保存在SESSION状态中,后端把这个token放到cookie中交给前端页面. 第二步:下次前端需 ...
- python 常用的高阶函数
前言 高阶函数指的是能接收函数作为参数的函数或类:python中有一些内置的高阶函数,在某些场合使用可以提高代码的效率. map() map函数可以把一个迭代对象转换成另一个可迭代对象,不过在pyth ...
- 微软Power BI 每月功能更新系列——6月Power BI 新功能学习
Power BI Desktop 6月产品功能摘要 本月Power BI Desktop的更新,专注于图表格式化的灵活性调整,通过过滤和排序选项,数据视图现在更加强大.多个连接器也获得重大更新,其中包 ...
- 使用Git来撤销修改
首先进入一个有Git管理的文件夹下: 当我们在文件编写过程中出现了一个错误怎么办呢?如下: 但是此时你并没有将文件提交缓冲区,你可以去手动打卡文件删除这个错误. 当然你也可以查看一下状态: 发现这个文 ...
- python之路,正则表达式
python3 正则表达式 前言: (1). 处理文本称为计算机主要工作之一(2)根据文本内容进行固定搜索是文本处理的常见工作(3)为了快速方便的处理上述问题,正则表达式技术诞生,逐渐发展为一个单独技 ...
- JavaBasic_10
JVM中的对一个对象的所有初始化动作,是javac在字节码文件中帮我们生成的 1.成员变量的显式初始化 2.初始化代码块(构造代码块) 3.构造方法 初始化静态的东西 在Java中,一个没有方法体的方 ...
- P2331 [SCOI2005]最大子矩阵 (动规:分类讨论状态)
题目链接:传送门 题目: 题目描述 这里有一个n*m的矩阵,请你选出其中k个子矩阵,使得这个k个子矩阵分值之和最大.注意:选出的k个子矩阵不能相互重叠. 输入输出格式 输入格式: 第一行为n,m,k( ...
- 通过更改服务器解决双系统ubuntu时间+8
安装ntpdate: sudo apt-get install ntpdate 设置校正服务器: sudo ntpdate time.windows.com 设置硬件时间为本地时间: sudo hwc ...