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 和等高线绘图contour/contourf的搭配使用
Numpy中 meshgrid() 和等高线绘图contour()/contourf()的搭配使用 np.meshgrid() 接收参数np.meshgrid(x1,x2,x3...) x1,x2,x ...
- NumPy - np.meshgrid()
np.meshgrid(*xi, **kwargs) 从坐标向量中返回坐标矩阵. np.meshgrid的作用是根据传入的两个一维数组参数生成两个数组元素的列表. 如下所示: 第一个数组为xnums, ...
- python中grid函数_Python / NumPy中meshgrid的目的是什么?
实际上文档中已经提到了np.mgrid的目的: np.mgrid 从坐标向量返回坐标矩阵. 在给定一维坐标数组x1,x2,...,xn的情况下,为N-D网格上的N-D标量/矢量场的矢量化评估制作N-D ...
- 【Numpy】 meshgrid()函数
np.mesharid()函数通常用来生成二维数据网格,例如一张灰度图片中长为x轴,宽为y轴,图中每一个像素点. 可以接受两个一维数组生成两个二维矩阵: np.meshgrid(np.arange(4 ...
- Numpy中Meshgrid函数
Meshgrid函数的基本用法 meshgrid函数用两个坐标轴上的点在平面上画网格. 用法: [X,Y]=meshgrid(x,y) [X,Y]=meshgrid(x)与[X,Y]=meshgr ...
- NumPy(十七):Meshgrid函数【应用场景:等高线、SVC中超平面的绘制】
一.Meshgrid函数 import numpy as np import matplotlib.pyplot as pltx = np.linspace(0, 1, 5) y = np.linsp ...
- Numpy中np.mashgri() 函数介绍及2种应用场景
@[toc](Numpy中np.mashgri() 函数介绍及2种应用场景 文章目录:) 近期在好几个地方都看到meshgrid的使用,虽然之前也注意到meshgrid的用法. 但总觉得印象不深刻,不 ...
- python网格测试_测试d的numpy网格大小调整
我有一个形状为(10049280)的测试数据集x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5 y_min, y_max = X[:, 1]. ...
- np中meshgrid生成二维矩阵matplotlib中imshow生成图形
numpy中meshgrid函数接收两个一维数组,并产生两个二维矩阵 import numpy as np points=np.arange(-5,5,0.01) #生成1000个间隔相等的点 xs, ...
最新文章
- Tomcat_7.x压缩版_环境变量配置(亲测有效)
- Android Studio开发入门-引用jar及so文件
- Java 泛型中? super T和? extends T的区别
- oracle hr样本模式,Oracle 样本模式 HR
- BZOJ 4002--有意义的字符串(矩阵乘法)
- php5.2 get漏洞,ThinkPHP 5.x 远程代码getshell漏洞分析
- apache.camel_在即将发布的Camel 2.21版本中改进了使用Apache Camel和ActiveMQ Artemis处理大型消息的功能...
- 非常漂亮的后台登录页面
- windos下安装redis
- 寻路优化(一)——二维地图上A*启发函数的设计探索
- 终于把Redis场景设计搞清楚了,需要掌握的都在这了
- log日志显示与写入文件—qt
- 欧拉函数知识点总结及欧拉函数打表代码(数论)
- 华为认证的好处是什么?考试费是多少?
- python全栈开发工程师_老男孩Python高级全栈开发工程师三期完整无加密带课件(共104天)...
- windows添加hosts
- Ubuntu下为Firefox安装Adobe Flash Player
- LDOMs 也被叫做OVM-SPARC 常用的命令集合
- Java练习用Java写双人游戏简单四子棋
- 百度前端训练营day2笔记