数据分析 day02(二)

2.9 矩阵与矩阵运算

  1. 什么是矩阵?
    矩阵在numpy是一种特殊的数组,是一个按照长方阵列排列成复数或者实数的集合,即矩阵是一个二维数组
  2. 什么是向量?
    具有大小和方向的量就是向量,在一个n维空间中向量通常用n个坐标来表示,例如A(x1,y1) A(x1,y1,z1)
    在线性代数中一个向量有两种表示方式,A(x1,y1,z1)或者A((x1),(y1),(z1)),前者是一个行向量,后者是一个列向量;
    在numpy中,一个一维数组就是一个行向量,一个n行一列的二维数组就是列向量
  3. 向量和矩阵的关系
    向量是一种特殊的矩阵,多个向量组合在一起可以构成一个矩阵
    A(3,4,5) B(6,7,8),A和B两个行向量按行组合和在一起就会构成一个矩阵
    C((1),(2),(3)) D((4),(5),(6)),C和D两个列向量按列组合在一起就会一个矩阵
  4. 向量(矩阵)的转置
    A(3,4,5)的转置表示成A^T = ((3),(4),(5))
    转置就是把原来按行排列变成按列排列,原来按排的转成按行排排
    M = [[1,2,3],[4,5,6]] 这个2x3的矩阵
    M^T = [[1,4],[2,5],[3,6]]
2.9.1 矩阵和常数之间运算

矩阵和常数之间能进行乘和除两种运算
在这里插入图片描述

2.9.2 矩阵和矩阵之间的运算

矩阵和矩阵之间能够进行加、减和乘,并且两个矩阵进行加、减或者乘的时候要满足一定的条件

2.9.2.1 两个矩阵相加减,要求矩阵的形状必须相同

首先创建3个矩阵
在这里插入图片描述
两个形状相同的矩阵相加减,就是对应的下标上的数据相加减
在这里插入图片描述
形状不同的两个矩阵不能相加减
在这里插入图片描述

2.9.2.2 两个矩阵之间的点乘 np.dot(nd1,nd2)

nd1和nd2两个矩阵进点乘的时候:
取nd1的每一行和nd2的每一个列对应项相乘然后乘的结果相加,然后加的结果放在新的矩阵的位置由第一个矩阵取出的那一行的行标和第二个矩阵取出那一列列标来决定
【注意】前面的矩阵的列数和后面矩阵的行数一致两个矩阵才能点乘

首先看一下这三个矩阵
在这里插入图片描述
ndi,nd2都是3x4的二维矩阵,nd3是3x3的二维矩阵
在这里插入图片描述

nd1,nd2都不能与nd3进行点乘
在这里插入图片描述
nd3却分别能和nd1,nd2进行点乘
在这里插入图片描述
nd3的行数为3,nd1和nd2的列数为3,所以能nd3能分别和nd1,nd2进行点乘
计算结果怎么来的,以nd3和nd1为例
取nd3的每一行和nd1的每一个列对应项相乘然后乘的结果相加,然后加的结果放在新的矩阵的位置由第一个矩阵取出的那一行的行标和第二个矩阵取出那一列列标来决定
[ [179=20x0+25x5+27x2 , 142=20x2+25x3+27x1 , 161=20x4+25x3+27x3 , 533= 20x7+25x6+27x9],
[183=28x0+25x5+29x2 , 160=28x2+25x3+29x1 , 199=28x4+25x3+29x3 , 607= 28x7+25x3+29x9],
[175=28x0+27x5+20x2 , 157=28x2+27x3+20x1 , 172=28x4+27x3+20x3 , 538= 28x7+27x6+20x9] ]

2.9.3 广播机制

在数学中矩阵和向量或者常数是不能相加减的,而且矩阵之间的加减要形状一致,但是在代码中没有那么多的限制
在这里插入图片描述

  1. 矩阵和常数相加减,每个下标对应的值的加减
    在这里插入图片描述
  1. 行相加(只能有一行)
    每一行对应的下标与一维数组的对应的下标相加
    在这里插入图片描述
  1. 列相加(只能由一列)
    每一列对应的下标相加
    在这里插入图片描述

2.10 数组排序

2.10.1 根据数值大小,排列数组中数据

一维数组排序
首先创建一个一维数组
在这里插入图片描述

  1. 对原数组进行排序
    在这里插入图片描述

  2. 成一个排序以后的新数组
    在这里插入图片描述

二维数组排序
axis代表排序的方向,默认是-1
kind代表排序算法,默认是quicksort代表快速排序,可取值"quicksort"、"mergesort"混排、"heapsort"堆排序
先创建一个二维数组
在这里插入图片描述

  1. 按行排序(升序)
    在这里插入图片描述
  2. 按列排序(axis=0)
    在这里插入图片描述
2.10.2 根据数值大小,排列数值中数据的下标

在这里插入图片描述

思考题:如何根据第三列对一个5*5的二维矩阵进行排序
在这里插入图片描述

  1. 用切片方法取出第三列
    在这里插入图片描述
  2. 用 np.argsort() 排下标 ,
    在这里插入图片描述
    第3列中最小的是第0行,然后是第3行…
    在这里插入图片描述
  3. 根据索引index (index是一个数组) 排序
    在这里插入图片描述
扩展 图片的灰度化

图片的灰度化就是把彩色图片转化成黑白图片,把三通道变成灰度级
在这里插入图片描述
由于无符号的8位整型数不好计算,所以转成浮点型,查看一下转为浮点型后数组的样式
在这里插入图片描述
依旧是一个三维数组,三个维度分别代表像素行数、列数和rgb通道值,这个通道值由 uint8(无符号的短整型)变为了 0-1之间浮点数

方法一、对通道进行聚合
这个通道是三个浮点数的一维数组,将这个通道进行聚合,聚合之后,这个数组就变成常数了,整个三维数组就变成了二维数组,二维数组就是黑白图片
在这里插入图片描述
使用sum函数,对最后一个维度(第二维度)进行加聚合(加聚合是按照原来的图片的色泽度等比聚合的,仍然是一个线性变化,不会改变原来图片的性质)
可以看到,这些数都变成了大于1的浮点数
在这里插入图片描述
展示一下
在这里插入图片描述
为什么要加 cmap=“gray” 呢?尝试一下不加,就是这样的,如果对以前的照片有了解的话,就知道这种和以前的胶卷机的曝光以后的照片一样
在这里插入图片描述
除了加聚合,还可以使用其他聚合方式,但其他聚合方式没有按照等比例,就会改变图片原有的色泽度
最大值聚合(更亮)
在这里插入图片描述
最小值聚合(更暗)
在这里插入图片描述
不是所有的聚合都可以,比如方差聚合,就不符合线性变化,改变了图片本身的色泽度比例
在这里插入图片描述

聚合方式比较生硬,不能去灵活的调整图片

方法二、对rgb通道值进行加权
在这里插入图片描述
创建一个行向量,对r g b 三个值进行加权 ,使图片色泽更偏向于 r g b 中的一个,这三个值加一起不要大于1,不要小于0.5,最好为1
在这里插入图片描述
使用点乘的方式 数组乘向量
在这里插入图片描述
展示图片
在这里插入图片描述
该方法通过修改行向量使图片色泽更偏向于 r g b 中的一个,更加灵活

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值