美文网首页
机器学习系列 之 Numpy结构化数据属性和操作(二)

机器学习系列 之 Numpy结构化数据属性和操作(二)

作者: 佳佳爱科技AITech | 来源:发表于2020-05-01 17:15 被阅读0次

    本节内容:

    1. 复习上节学到的ndarray数组创建

    2. 多维数组矩阵间的运算操作,加,减,乘,与内积 (常用)

    3. 矩阵变换操作,转置,求sum, cumsum, diff, 极大,极小值,均值,中位数, 极大值和极小值位置索引,nonzero 非零元素行列坐标分开, sort 矩阵排序

    4. 矩阵的拆分与合并。vsplit, hsplit, vstack, hstack

    数组的创建 

    为了更好展示矩阵间运算的操作,通过np.array( ) 方法直接创建两个相同维度的a,b矩阵,如代码所示:

    a,b 矩阵输出

    矩阵运算

    需要注意,矩阵间的运算,必须是相同维度,相同行列数的矩阵之间可以进行,加减乘内积等运算操作。比如两行三列,无法同三行两列进行运算,程序会报dimension not match 类似的ERROR

    内积dot 方法,a.dot( b ) 和 np.dot ( a, b ) 二者方法异曲,不同写法,实现一致 

    矩阵运算非常灵活,可以直接矩阵 a**2, a-1,a+10 来表达整个维度的矩阵 a 内所有元素都 ^2, -1, +10 ,还有开根, e 幂次运算等

    参考下方代码举例:

    加,减,乘,内积运算 灵活使用运算

    矩阵操作

    1. ravel ( ) / flatten ( ) 方法介绍

    将N维矩阵,拉长或者展平成一维数组,但ravel ,flatten 不会改变矩阵的原有shape

    参考代码注释:

    flatten / ravel

    2. 重新认识reshape( ) 和 shape 属性

    reshape( ) 方法不会改变矩阵的shape 属性,但是shape 属性的重新赋值,会改变原有数据结构的形状。

    如下代码显示,D矩阵,原来是2*3 ,reshape为3*2 形状输出显示,但是查看shape 属性,依旧是2*3; 但当把D的shape 赋值成6*1的矩阵的时候,无论矩阵D 的输出还是shape都变成了6行1列。

    参考代码注释

    reshape VS shape

    3. T 转置

    转置,原来的行变成转置后的列,所以,if 原来两行四列,T后,就是四行两列

    转置T,不会改变原来矩阵的形状属性shape

    参考代码注释

    T 转置

    4. 矩阵合并

    vstack( val ) VS hstack( val )

    vstack 是垂直方向多个矩阵的merge。v 是 vertical 的意思。参数:以元组形式传入多个数组. 如:vstack((a,b,c)) ,vstack要求传入的矩阵维度相同,因为是垂直方向合并数组,所以rows 行数可同可不同,但是列数需要相同。否则,不同列数的矩阵无法上下合并,会有dimension column index 溢出

    hstack 是水平方向多个矩阵的合并。h 是 horizontal 的意思。参数:以元组形式传入多个数组. 如:hstack((a,b,c)) ,hstack要求传入的矩阵维度相同,因为是水平方向或者左右相同行数合并数组,所以rows 行数务必相同,columns可同可不同。否则,行数不同,无法在水平方向每行rows做合并。会有dimension rows index 溢出

    参考代码注释:

    hstack VS vstack

    5. 矩阵拆分

    split 加上axis (0,1)专门用于矩阵的横向和纵向拆分,篇幅受限,下节专门介绍

    本节,用numpy提供的vsplit( val ) and hsplit ( val )方法来实现矩阵的切分

    vsplit 是纵向看矩阵,横向等间距切分。hsplit 是水平方向看过去,等间距切分列数。

    注意下,vsplit需要等分,如果实现矩阵的不等量分割,用array_split ( ); 同时vsplit和hsplit也要注意下,行数,列数是否能被等分。五行矩阵是无法被3等分的,如此类似

    参考代码注释:

    hsplit vsplit

    vsplit and hsplit 可以通过传参,指定拆分的范围,参数是元组形式。

    例如,原来hsplit(arr,2)// 水平方向的列数一分为二;现在 hsplit(arr, (3,5)) // 水平方向的列数,拆分column 3 和 column 4 这个范围在一起。

    参考代码注释

    给定范围参数

    6. 矩阵求和,求极值

    sum( )求矩阵的所有元素之和, 若分别求行和列,需要加上axis 参数

    max( ), min( ) 求矩阵元素极大值,极小值,加上axis求解每行,每列的极值

    argmax( ), argmin( ) 求矩阵元素极值的所在位置index,允许带axis参数

    参考代码注释

    sum max / min argmin VS argmax

    7. 矩阵求均值,求中位数

    矩阵的mean 和 average 都是求均值,带上axis则为行or列的均值

    方法 median(A) 表示求A矩阵的中位数,奇数序列元素,返回中间值;偶数序列元素,找到中间两个数字,求平均数。

    参考代码注释

    mean,average,median

    8. 矩阵求cumsum 累计求和,diff 前后元素之差

    cumsum 是cumulation sum 累计求和。后一个元素的值,是前面所有元素累计求和后再元素相加的值。

    diff 方法是看后一个元素较前一个元素之差是多少

    参考代码注释

    cumsum VS diff

    9. nonzero矩阵非零元素行列坐标分开

    nonzero 矩阵中的非零元素值的行坐标index和纵坐标index,拆分成两个数组。而零元素的坐标忽略不计

    比如,代码举例中1,2,3...7,8,10,11 都是非零值。他们对应的行坐标分别是

    [0, 0, 0, 1, 1, 1, 1, 2, 2, 2]; 纵坐标index是[1, 2, 3, 0, 1, 2, 3, 0, 2, 3]。 也就是二者[0,1] 代表数值1的位置;[0,2]代表数值2的位置,以此类推

    参考代码注释

    nonzero

    10. sort 矩阵排序,默认横轴axis =1

    sort 方法,默认是水平方向,矩阵每行元素值的从小到大排序

    如果垂直方向,column 排序,需要加上axis =0 

    参考代码注释

    sort

    11. clip (arr, small, large) 方法解析

    矩阵arr中的所有元素,找到不在small ~ large 值区间内的元素, 且若比large(最大值还大), 用large value(最大值替换),若比最小值 (small) 还小,则用最小值 (small) 来填充。在small ~ large区间值内的元素不变

    参考代码注释

    clip方法

    本章小结

    1. 矩阵np.array() 的创建使用

    2. 矩阵运算

    3. 矩阵极值,平均数,中位数,极值index位置等操作

    4. 矩阵的vsplit/hsplit 拆分, vstack/hstack 合并

    相关文章

      网友评论

          本文标题:机器学习系列 之 Numpy结构化数据属性和操作(二)

          本文链接:https://www.haomeiwen.com/subject/hbxqghtx.html