一、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]])