admin管理员组文章数量:1026989
np.meshgrid, ravel(), np.c
前言: 楼主最近在学机器学习时碰到的一些函数,用来画决策边界。记录现在的想法。
1: np.meshgrid的用法:
X,Y = np.meshgrid(x,y)是将x中的每个点与y中的每个点连起来成为坐标,例如x是(300,)的array, 比如x=array(1,2,......300),y是(200,)的array,y=array(1,2,.......200)。那么得到的X,Y都是(200,300)的array。X=array([[1,2,.....300],[1,2,.....300],[1,2,.....300],...........[1,2,.....300]],相当于把x的元素复制了len(y)的长度。而Y=array([[1,1,.........1],[2,........2],[3,.......3],......[200,........200]])。Y每一个一维向量长度都为len(x)。
import numpy as npx = np.linspace(1, 300, 300)
y = np.linspace(1, 200, 200)
X, Y = np.meshgrid(x, y)# 得到结果
'''
X = [[ 1. 2. 3. ... 298. 299. 300.][ 1. 2. 3. ... 298. 299. 300.][ 1. 2. 3. ... 298. 299. 300.]...[ 1. 2. 3. ... 298. 299. 300.][ 1. 2. 3. ... 298. 299. 300.][ 1. 2. 3. ... 298. 299. 300.]]Y= [[ 1. 1. 1. ... 1. 1. 1.][ 2. 2. 2. ... 2. 2. 2.][ 3. 3. 3. ... 3. 3. 3.]...[198. 198. 198. ... 198. 198. 198.][199. 199. 199. ... 199. 199. 199.][200. 200. 200. ... 200. 200. 200.]]
'''
2:ravel()
ravel()的用法是把多维数组拉成一维数组:
import numpy as npx = np.random.randn(5,4)
print(x)
print(x.shape)'''
x=
[[ 0.17086596 -0.57977474 1.13563738 0.24395295][ 0.30278266 -1.47973336 0.98314375 1.63522343][-0.50617984 -0.21090076 0.11548333 -1.63088674][-0.55658075 -0.34304816 -1.01107859 -1.63546229][ 1.36377652 -2.03799223 -1.31337364 -0.86417854]]
x.shape = (5, 4)y =
[ 0.17086596 -0.57977474 1.13563738 0.24395295 0.30278266 -1.479733360.98314375 1.63522343 -0.50617984 -0.21090076 0.11548333 -1.63088674-0.55658075 -0.34304816 -1.01107859 -1.63546229 1.36377652 -2.03799223-1.31337364 -0.86417854]
y.shape = (20,)
'''
3: np.c_
np.c_的作用就是把数组按照列元素来连接,对于1维数组,如下:
import numpy as npx = np.linspace(1, 5, 5)
y = np.linspace(2, 6, 5)
z = np.c_[x, y]
print(x, x.shape)
print(y, y.shape)
print(z, z.shape)'''
x=
[1. 2. 3. 4. 5.] (5,)
y=
[2. 3. 4. 5. 6.] (5,)
z=
[[1. 2.][2. 3.][3. 4.][4. 5.][5. 6.]] (5, 2)
'''
对于2维数组:
import numpy as npx = np.random.randint(1, 5, (2, 3))
y = np.random.randint(5, 8, (2, 3))
z = np.c_[x, y]
print(x, x.shape)
print(y, y.shape)
print(z, z.shape)'''
x=
[[4 3 1][3 2 3]] (2, 3)
y=
[[7 7 7][5 6 7]] (2, 3)
z=
[[4 3 1 7 7 7][3 2 3 5 6 7]] (2, 6)'''# 可以看出z是由x, y按照一维拼接起来
对于高维数组:
import numpy as npx = np.random.randint(1, 5, (2, 3, 2))
y = np.random.randint(5, 8, (2, 3, 2))
z = np.c_[x, y]
print(x, x.shape)
print(y, y.shape)
print(z, z.shape)'''
x=
[[[1 3][4 3][2 4]][[2 1][3 2][4 1]]] (2, 3, 2)
y=
[[[5 7][5 7][5 5]][[7 6][6 7][6 7]]] (2, 3, 2)
z=
[[[1 3 5 7][4 3 5 7][2 4 5 5]][[2 1 7 6][3 2 6 7][4 1 6 7]]] (2, 3, 4)'''
import numpy as npx = np.random.randint(1, 5, (2, 3, 2, 3))
y = np.random.randint(5, 8, (2, 3, 2, 3))
z = np.c_[x, y]
print(x, x.shape)
print(y, y.shape)
print(z, z.shape)'''
x=
[[[[2 4 3][4 4 4]][[2 3 3][3 1 1]][[1 3 1][4 1 2]]][[[3 4 1][1 2 1]][[1 4 1][4 1 4]][[2 4 3][1 1 1]]]] (2, 3, 2, 3)y=
[[[[6 5 5][5 7 7]][[7 7 6][7 7 6]][[5 6 7][7 6 5]]][[[6 6 7][6 6 7]][[5 6 6][6 5 6]][[6 6 5][6 6 5]]]] (2, 3, 2, 3)
z=
[[[[2 4 3 6 5 5][4 4 4 5 7 7]][[2 3 3 7 7 6][3 1 1 7 7 6]][[1 3 1 5 6 7][4 1 2 7 6 5]]][[[3 4 1 6 6 7][1 2 1 6 6 7]][[1 4 1 5 6 6][4 1 4 6 5 6]][[2 4 3 6 6 5][1 1 1 6 6 5]]]] (2, 3, 2, 6)'''
综上:可以看出np.c_连接两个数组的最后一维的列向量。
4:plt.contourf的用法
作用:绘制轮廓线与等高线 。例如:
import numpy as np
import matplotlib.pyplot as pltx = np.linspace(1, 5, 10)
y = np.linspace(2, 8, 10)
xx, yy = np.meshgrid(x, y)z = np.exp(xx)-yyplt.contourf(x, y, z, cmap=plt.cm.Paired, alpha=0.8)
plt.show()
5:应用
把上述函数连接起来用,就能在二维平面生成许多的等顺序排列的点
import numpy as np
import matplotlib.pyplot as plth = 0.5 # 为了便于观察h设的很大
x1min = 3.3
x1max = 8.9
x2min = 1.0
x2max = 5.4
xx, yy = np.meshgrid(np.arange(x1min, x1max, h),np.arange(x2min, x2max, h))'''
xx=[[3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8]]
yy=[[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. ][1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5][2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. ][2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5][3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. ][3.5 3.5 3.5 3.5 3.5 3.5 3.5 3.5 3.5 3.5 3.5 3.5][4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. ][4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5][5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. ]]
'''t = np.c_[xx.ravel(), yy.ravel()]
print(t)plt.scatter(xx, yy)
plt.show()
得到图形:
在sklearn中的iris数据集中,
这时候就可以把两个图结合,把第一个图的每个点带入预测函数里,得到标签,这时候上图的点就能被分成三部分:
这时候就得到了决策边界,成功把数据集划分。
np.meshgrid, ravel(), np.c
前言: 楼主最近在学机器学习时碰到的一些函数,用来画决策边界。记录现在的想法。
1: np.meshgrid的用法:
X,Y = np.meshgrid(x,y)是将x中的每个点与y中的每个点连起来成为坐标,例如x是(300,)的array, 比如x=array(1,2,......300),y是(200,)的array,y=array(1,2,.......200)。那么得到的X,Y都是(200,300)的array。X=array([[1,2,.....300],[1,2,.....300],[1,2,.....300],...........[1,2,.....300]],相当于把x的元素复制了len(y)的长度。而Y=array([[1,1,.........1],[2,........2],[3,.......3],......[200,........200]])。Y每一个一维向量长度都为len(x)。
import numpy as npx = np.linspace(1, 300, 300)
y = np.linspace(1, 200, 200)
X, Y = np.meshgrid(x, y)# 得到结果
'''
X = [[ 1. 2. 3. ... 298. 299. 300.][ 1. 2. 3. ... 298. 299. 300.][ 1. 2. 3. ... 298. 299. 300.]...[ 1. 2. 3. ... 298. 299. 300.][ 1. 2. 3. ... 298. 299. 300.][ 1. 2. 3. ... 298. 299. 300.]]Y= [[ 1. 1. 1. ... 1. 1. 1.][ 2. 2. 2. ... 2. 2. 2.][ 3. 3. 3. ... 3. 3. 3.]...[198. 198. 198. ... 198. 198. 198.][199. 199. 199. ... 199. 199. 199.][200. 200. 200. ... 200. 200. 200.]]
'''
2:ravel()
ravel()的用法是把多维数组拉成一维数组:
import numpy as npx = np.random.randn(5,4)
print(x)
print(x.shape)'''
x=
[[ 0.17086596 -0.57977474 1.13563738 0.24395295][ 0.30278266 -1.47973336 0.98314375 1.63522343][-0.50617984 -0.21090076 0.11548333 -1.63088674][-0.55658075 -0.34304816 -1.01107859 -1.63546229][ 1.36377652 -2.03799223 -1.31337364 -0.86417854]]
x.shape = (5, 4)y =
[ 0.17086596 -0.57977474 1.13563738 0.24395295 0.30278266 -1.479733360.98314375 1.63522343 -0.50617984 -0.21090076 0.11548333 -1.63088674-0.55658075 -0.34304816 -1.01107859 -1.63546229 1.36377652 -2.03799223-1.31337364 -0.86417854]
y.shape = (20,)
'''
3: np.c_
np.c_的作用就是把数组按照列元素来连接,对于1维数组,如下:
import numpy as npx = np.linspace(1, 5, 5)
y = np.linspace(2, 6, 5)
z = np.c_[x, y]
print(x, x.shape)
print(y, y.shape)
print(z, z.shape)'''
x=
[1. 2. 3. 4. 5.] (5,)
y=
[2. 3. 4. 5. 6.] (5,)
z=
[[1. 2.][2. 3.][3. 4.][4. 5.][5. 6.]] (5, 2)
'''
对于2维数组:
import numpy as npx = np.random.randint(1, 5, (2, 3))
y = np.random.randint(5, 8, (2, 3))
z = np.c_[x, y]
print(x, x.shape)
print(y, y.shape)
print(z, z.shape)'''
x=
[[4 3 1][3 2 3]] (2, 3)
y=
[[7 7 7][5 6 7]] (2, 3)
z=
[[4 3 1 7 7 7][3 2 3 5 6 7]] (2, 6)'''# 可以看出z是由x, y按照一维拼接起来
对于高维数组:
import numpy as npx = np.random.randint(1, 5, (2, 3, 2))
y = np.random.randint(5, 8, (2, 3, 2))
z = np.c_[x, y]
print(x, x.shape)
print(y, y.shape)
print(z, z.shape)'''
x=
[[[1 3][4 3][2 4]][[2 1][3 2][4 1]]] (2, 3, 2)
y=
[[[5 7][5 7][5 5]][[7 6][6 7][6 7]]] (2, 3, 2)
z=
[[[1 3 5 7][4 3 5 7][2 4 5 5]][[2 1 7 6][3 2 6 7][4 1 6 7]]] (2, 3, 4)'''
import numpy as npx = np.random.randint(1, 5, (2, 3, 2, 3))
y = np.random.randint(5, 8, (2, 3, 2, 3))
z = np.c_[x, y]
print(x, x.shape)
print(y, y.shape)
print(z, z.shape)'''
x=
[[[[2 4 3][4 4 4]][[2 3 3][3 1 1]][[1 3 1][4 1 2]]][[[3 4 1][1 2 1]][[1 4 1][4 1 4]][[2 4 3][1 1 1]]]] (2, 3, 2, 3)y=
[[[[6 5 5][5 7 7]][[7 7 6][7 7 6]][[5 6 7][7 6 5]]][[[6 6 7][6 6 7]][[5 6 6][6 5 6]][[6 6 5][6 6 5]]]] (2, 3, 2, 3)
z=
[[[[2 4 3 6 5 5][4 4 4 5 7 7]][[2 3 3 7 7 6][3 1 1 7 7 6]][[1 3 1 5 6 7][4 1 2 7 6 5]]][[[3 4 1 6 6 7][1 2 1 6 6 7]][[1 4 1 5 6 6][4 1 4 6 5 6]][[2 4 3 6 6 5][1 1 1 6 6 5]]]] (2, 3, 2, 6)'''
综上:可以看出np.c_连接两个数组的最后一维的列向量。
4:plt.contourf的用法
作用:绘制轮廓线与等高线 。例如:
import numpy as np
import matplotlib.pyplot as pltx = np.linspace(1, 5, 10)
y = np.linspace(2, 8, 10)
xx, yy = np.meshgrid(x, y)z = np.exp(xx)-yyplt.contourf(x, y, z, cmap=plt.cm.Paired, alpha=0.8)
plt.show()
5:应用
把上述函数连接起来用,就能在二维平面生成许多的等顺序排列的点
import numpy as np
import matplotlib.pyplot as plth = 0.5 # 为了便于观察h设的很大
x1min = 3.3
x1max = 8.9
x2min = 1.0
x2max = 5.4
xx, yy = np.meshgrid(np.arange(x1min, x1max, h),np.arange(x2min, x2max, h))'''
xx=[[3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8][3.3 3.8 4.3 4.8 5.3 5.8 6.3 6.8 7.3 7.8 8.3 8.8]]
yy=[[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. ][1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5 1.5][2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. 2. ][2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5 2.5][3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. 3. ][3.5 3.5 3.5 3.5 3.5 3.5 3.5 3.5 3.5 3.5 3.5 3.5][4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. 4. ][4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5][5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. 5. ]]
'''t = np.c_[xx.ravel(), yy.ravel()]
print(t)plt.scatter(xx, yy)
plt.show()
得到图形:
在sklearn中的iris数据集中,
这时候就可以把两个图结合,把第一个图的每个点带入预测函数里,得到标签,这时候上图的点就能被分成三部分:
这时候就得到了决策边界,成功把数据集划分。
本文标签: npmeshgridravel()npc
版权声明:本文标题:np.meshgrid, ravel(), np.c 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://it.en369.cn/IT/1687024324a56207.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论