2023年 5月 26日

Python语法np.c_分析、np.meshgrid、plt.pcolormesh和分类器

1、np.c_和np.r_

直接上代码:

多维的数据:
   	d = np.array([[1, 2, 3], [4, 5, 6]])
    c = np.array([[4,5,6],[7,8,9]])
    print(np.c_[d,c])

[[1 2 3 4 5 6]
 [4 5 6 7 8 9]]
 一维的数据:
	d = np.array([1, 2, 3])
    c = np.array([4,5,6])
    print(np.c_[d,c])
[[1 4]
 [2 5]
 [3 6]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

可以看出,np.c_是将数据按列排列
下面看np.r_的格式:

一维数据:
	d = np.array([1, 2, 3])
    c = np.array([4,5,6])
    print(np.r_[d,c])

[1 2 3 4 5 6]

二维数据:
	d = np.array([[1, 2, 3],[4,5,6]])
    c = np.array([[4,5,6],[7,8,9]])
    print(np.r_[d,c])
[[1 2 3]
 [4 5 6]
 [4 5 6]
 [7 8 9]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

可以看出,np.r_是按行排列的。

2、np.meshgrid

当传入的参数为:  [1 2 3] ,[4 5 6 7]时
  • 1
 传回的第一个矩阵为:
 [[1 2 3]
 [1 2 3]
 [1 2 3]
 [1 2 3]]
 传回的第二个矩阵为:
[[4 4 4]
 [5 5 5]
 [6 6 6]
 [7 7 7]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

可以看出,也就是会生成两个3×4的矩阵,其中3为第一个的数据项,4为第二个参数的数据项。只不过是将行复制几次,或者列复制几次给你返回操作。该函数主要作用是对坐标的x,y的网格遍历。
在这里插入图片描述

xx, yy = np.meshgrid(np.arange(xmin, xmax , h), np.arange(ymin, ymax, h))
  • 1

3、plt.pcolormesh

用来将网格数据进行上处理:

plt.pcolormesh(xx,yy,z,cmap=cmap_1)
  • 1

其中,xx和yy为点位信息,z为点位信息对应cmap中的第几个颜色。

4、KNN分类器

import sklearn
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
import sklearn.datasets as data
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

if __name__ == '__main__':
    iris = data.load_iris()
    x_train = iris.data[:,:2]
    y_train = iris.target
    k = 15
    h = 0.02
    cmap_1 = ListedColormap(['#FF0000','#00FF00','#0000FF'])
    cmap_2 = ListedColormap(['#FFAA00','#AAFF00','#00AAFF'])
    myKnn = KNeighborsClassifier(k)
    myKnn.fit(x_train,y_train)
    xmin, xmax = x_train[:,0].min() - 1, x_train[:,0].max() - 1
    ymin, ymax = x_train[:,1].min() - 1, x_train[:,1].max() - 1
    print(xmin)
    print(ymin)
    xx, yy = np.meshgrid(np.arange(xmin, xmax , h), np.arange(ymin, ymax, h))
    z = myKnn.predict(np.c_[xx.ravel(),yy.ravel()])
    z = z.reshape(yy.shape)
    plt.pcolormesh(xx,yy,z,cmap=cmap_1)
    plt.scatter(x_train[:,0],x_train[:,1], c = y_train, cmap=cmap_2 )
    plt.xlim(xx.min(), xx.max())
    plt.ylim(yy.min(), yy.max())
    plt.show()
    # print(np.array([[1,2,3],[4,5,6]]))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30