numpy之meshgrid和where
meshgrid
np.meshgrid()
np.meshgrid
从坐标向量返回坐标矩阵。
这样说可能很抽象。举个例子。
x = np.arange(-2,2)
y = np.arange(0,3)#生成一位数组,其实也就是向量
x
Out[31]: array([-2, -1, 0, 1])
y
Out[32]: array([0, 1, 2])
z,s = np.meshgrid(x,y)#将两个一维数组变为二维矩阵
z
Out[36]:
array([[-2, -1, 0, 1],
[-2, -1, 0, 1],
[-2, -1, 0, 1]])
s
Out[37]:
array([[0, 0, 0, 0],
[1, 1, 1, 1],
[2, 2, 2, 2]])
从代码上看,我们得到了这样一组值:
-2, -1, 0, 1,---- 0, 0, 0, 0
-2, -1, 0, 1,---- 1, 1, 1, 1
也就是说,它讲 x 变成了矩阵 z 的行向量,y 变成了矩阵 s 的列向量。
反过来,也是一样的:
z,s = np.meshgrid(y,x)
z
Out[40]:
array([[0, 1, 2],
[0, 1, 2],
[0, 1, 2],
[0, 1, 2]])
s
Out[41]:
array([[-2, -2, -2],
[-1, -1, -1],
[ 0, 0, 0],
[ 1, 1, 1]])
以上面这个例子来说,z 和 s 就构成了一个坐标矩阵,实际上也就是一个网格,不知道你没有注意到,z 和 s 的维数是一样的,是一个4 × 4的网格矩阵,也就是坐标矩阵。
meshgrid
方法的参数数量不受限,可以得到任意 N 维空间中的坐标矩阵。
注意到,传入的对象是一维的。
想到这里,我觉得,这可能和方程式有关系(很可能我的感觉是错的,等以后发现再改这句话,但是我觉得这样的话,会很好理解这个函数方法),也就是行列式,但是方程式的右侧的 y 只有一列。
a1x1 + b1x2 + c1x3 + d1x4 + ...... =y1
a2x1 + b2x2 + c2x3 + d2x4 + ...... =y2
...
...
x, y = np.meshgrid(np.arange(-1, 1, 0.01), np.arange(-1, 1, 0.01))
contor = np.sqrt(x ** 2 + y ** 2)
plt.imshow(contor)
plt.colorbar()
plt.show()
np.where()
where(condition, [x, y])
当condition为True时,返回 x , 否则返回 y。
其实,在x, y 为一维数组时,就相当于:
[xv if c else yv for (c,xv,yv) in zip(condition,x,y)]
测试:
In [3]: x = np.arange(9).reshape(3,3)#创建一个3×3的矩阵
In [4]: x
Out[4]:
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
In [5]: np.where(x>4) #只输入condition
Out[5]: (array([1, 2, 2, 2], dtype=int64), array([2, 0, 1, 2], dtype=int64))
In [6]: np.where(x>7)# 只输入condition
Out[6]: (array([2], dtype=int64), array([2], dtype=int64))
通过上面的例子,我们可以发现,只输入condition的话,得到的结果是一个位置索引。它们就是满足条件的元素的索引,即为True的元素。
说明下:返回的第一个第一个数组为行坐标,第二个为纵坐标。
我们还可以用where来这样做:
In [8]: y = np.random.randn(3,3)
In [9]: y
Out[9]:
array([[ 1.59809956, -0.42735851, 1.46593089],
[-0.26497622, 0.53948157, -2.01569974],
[-0.11099139, -1.70616601, -1.34821361]])
In [10]: np.where(y > 0, 4, -4)
Out[10]:
array([[ 4, -4, 4],
[-4, 4, -4],
[-4, -4, -4]])
很显然,np.where()
是可以嵌套使用的,其类似于if..elif...else...,如果我们有多个条件的话。
大家都知道,布尔值在计算过程中是可以当做0和1处理的。
因此,我们还可以这样:
result = 3 * (con2 & -cond1) + 2 * - (cond1 | cond2)
numpy之meshgrid和where的更多相关文章
- Numpy中Meshgrid函数介绍及2种应用场景
近期在好几个地方都看到meshgrid的使用,虽然之前也注意到meshgrid的用法.但总觉得印象不深刻,不是太了解meshgrid的应用场景.所以,本文将进一步介绍Numpy中meshgrid的用法 ...
- 【转】numpy中 meshgrid 和 mgrid 的区别和使用
转自:https://www.cnblogs.com/shenxiaolin/p/8854197.html 一.meshgrid函数 meshgrid函数通常使用在数据的矢量化上. 它适用于生成网格型 ...
- Python的 numpy中 meshgrid 和 mgrid 的区别和使用
一.meshgrid函数 meshgrid函数通常使用在数据的矢量化上. 它适用于生成网格型数据,可以接受两个一维数组生成两个二维矩阵,对应两个数组中所有的(x,y)对. 示例展示: 由上面的示例展示 ...
- numpy教程06---ndarray的进阶操作
欢迎关注公众号[Python开发实战], 获取更多内容! 工具-numpy numpy是使用Python进行数据科学的基础库.numpy以一个强大的N维数组对象为中心,它还包含有用的线性代数,傅里叶变 ...
- [译]学习IPython进行交互式计算和数据可视化(五)
第四章:交互式绘图接口 本章我们将展示Python的绘图功能以及如何在IPython中交互式地使用它们. NumPy为处理大量的多维数组结构的数据提供了高效的方法.但是看行行列列的数字总不如直接看曲线 ...
- Python之那些好玩的图画
前言: matplotlib 是Python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.本文将以例子的形式分析matplot中支持的,分析中常用的几种图.其 ...
- numpy.meshgrid()
numpy提供的numpy.meshgrid()函数可以让我们快速生成坐标矩阵X,Y 语法:X,Y = numpy.meshgrid(x, y)输入:x,y,就是网格点的横纵坐标列向量(非矩阵)输出: ...
- 关于meshgrid和numpy.c_以及numpy.r_
meshgrid的目的是生成两套行列数一致的矩阵,其中一个是行重复,一个是列复制:可以这么来理解,通过ravel()将矩阵数据拉平之后,就可以将这两套矩阵累加在一起,形成一个两行数据,要达到这个效果是 ...
- numpy的生成网格矩阵 meshgrid()
numpy模块中的meshgrid函数用来生成网格矩阵,最简单的网格矩阵为二维矩阵 meshgrid函数可以接受 x1, x2,..., xn 等 n 个一维向量,生成 N-D 矩阵. 1 基本语法 ...
随机推荐
- JAVA并行程序基础
JAVA并行程序基础 一.有关线程你必须知道的事 进程与线程 在等待面向线程设计的计算机结构中,进程是线程的容器.我们都知道,程序是对于指令.数据及其组织形式的描述,而进程是程序的实体. 线程是轻量级 ...
- 074——VUE中vuex之模块化modules开发实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- OSI七层网络模型与TCP/IP四层模型介绍
目录 OSI七层网络模型与TCP/IP四层模型介绍 1.OSI七层网络模型介绍 2.TCP/IP四层网络模型介绍 3.各层对应的协议 4.OSI七层和TCP/IP四层的区别 5.交换机工作在OSI的哪 ...
- net start mysql启动mysql,提示发生系统错误 5 拒绝访问 解决方法
解决问题方法如下: 在dos下运行net start mysql 不能启动mysql!提示发生系统错误 5:拒绝访问!切换到管理员模式就可以启动了.所以我们要以管理员身份来运行cmd程序来启动mys ...
- UI基础:target...action设计模式,手势识别器.UIimageview
使用target..action和delegate设计模式可以实现解耦.使代码更加优化. 手势识别器: 手势识别器:是对触摸事件做了封装,无需自己去判断某个手势是否触发,手势识别器本身起到了识别作用, ...
- 如何使用Java读写系统属性?
如何使用Java读写系统属性? 读: Properties props = System.getProperties(); Enumeration prop_names = props.propert ...
- C高级第一次PTA作业
作业要求一 附加题目 写程序证明P++等价于(p)++还是等价于*(p++)? 1.设计思路: (1).题目算法描述 第一步:定义变量p并赋初值 第二步:分三次计算每次分别输出 p++,(p)++,* ...
- 为什么我们不应该使用微信或者 QQ 作为团队协作的 IM 工具?
如果你的团队没有觉得微信是低效的团队 IM 工具,那只有两种可能: 团队成员很少使用微信进行私人的生活和娱乐. 你就是一个低效的团队,而且还不自知. 本文内容 微信,连接一切 每个人都有微信 微信,低 ...
- 最优比率生成树 POJ 2728 迭代或者二分
别人解题报告的链接: http://blog.sina.com.cn/s/blog_691190870101626q.html 说明一下关于精度的问题,当结果是精确到小数点后3为,你自然要把误差定为至 ...
- POJ 3254 Corn Fields状态压缩DP
下面有别人的题解报告,并且不止这一个状态压缩题的哦···· http://blog.csdn.net/accry/article/details/6607703 下面是我的代码,代码很挫,绝对有很大的 ...