Python科学计算库Numpy里meshgrid用法及矩阵向量合并问题

一、meshgrid的作用

首先,meshgrid的作用是将两个向量进行横向纵向扩张

>>> import numpy as np
>>> x=np.arange(-1,3)
>>> x
array([-1,  0,  1,  2])
>>> y=np.array([7,8,9])
>>> y
array([7, 8, 9])
>>> xe,ye=np.meshgrid(x,y)
>>> xe
array([[-1,  0,  1,  2],
       [-1,  0,  1,  2],
       [-1,  0,  1,  2]])
>>> ye
array([[7, 7, 7, 7],
       [8, 8, 8, 8],
       [9, 9, 9, 9]])
也就是,将meshgrid作用后的结果xe和ye是具有相同维度的矩阵数组

然后,再对xe展平,ye展平和求转置,变成行向量合并成一个数组

>>> xe.ravel()
array([-1,  0,  1,  2, -1,  0,  1,  2, -1,  0,  1,  2])
>>> ye.ravel().T
array([7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9])
>>> np.array([xe.ravel(),ye.ravel().T])
array([[-1,  0,  1,  2, -1,  0,  1,  2, -1,  0,  1,  2],
       [ 7,  7,  7,  7,  8,  8,  8,  8,  9,  9,  9,  9]])
上面得到的结果的作用就是将x与y里的每个元素做对应组合,即笛卡尔积对应;这一技术通常在构造组合特征时使用。


二、numpy里向量的维度问题

给定行向量a和数组b,需要注意a的维度是1*4,要想变成列向量4*1直接取转置是没用的,需要指定维数进行转化

>>> a=np.array([3,5,1,2])
>>> a
array([3, 5, 1, 2])
>>> a.shape
(4,)
>>> a.T
array([3, 5, 1, 2])
>>> b=np.array([[9,8,7,6],[5,0,4,3]])
>>> b
array([[9, 8, 7, 6],
       [5, 0, 4, 3]])
>>> b.T
array([[9, 5],
       [8, 0],
       [7, 4],
       [6, 3]])
>>> np.dot(a,b.T)
array([86, 25])
>>> np.hstack((a,a))
array([3, 5, 1, 2, 3, 5, 1, 2])
>>> a.reshape(4,1)
array([[3],
       [5],
       [1],
       [2]])

向量的维度问题,在机器学习的训练集和验证集中的标签类别进行合并时,需要特别注意是按行向量hstack操作



你可能感兴趣的:(Python)