矩阵和数组的区别
---恢复内容开始---
区别:
1.数组中的元素可以是字符或字符串,而矩阵只能是数
2.数学计算的区别。矩阵直接用*号相乘,而数组需用.dot()
3.array更灵活,不仅能表示1维、2维,还能表示多维数据,运算速度也更快。
4.矩阵显示时,元素间无逗号;数组显示时,元素间用逗号隔开
一.矩阵(matrix)
矩阵是数组的特殊形式,
1.1 矩阵构建
mat函数
如data1=mat(ones((2,4)))
即构建一个2行4列的全为1的矩阵
data2=mat(random.randint(2,8,size=(2,5))),即生成一个2至8之间的随机整数矩阵,矩阵维度为2行5列。 注意,random与rand的区别在于返回类型不同,rand是int类型,而random是long int类型
data3=mat(diag([1,2,3])),即生成一个对角矩阵
2.矩阵计算
a1*a2 | 矩阵相乘 |
multiply(a1,a2) | 矩阵点乘 |
a1.T | 矩阵求转置 |
a1.I | 矩阵求逆 |
2.1矩阵行列操作
a1.sum(axis=0),求每列和
a1.max(),求矩阵中最大元素
a1[1,:].max(),计算第二行中最大值
np.max(a1,0),计算所有列的最大值,使用numpy中的max函数
np.argmax(a1,0),计算所有列的最大值对应在该列的索引
二.数组(array)
2.1数组的构建
np.zeros((m,n)) | 创建m行n列全为0的数组 |
np.ones((m,n)) | 创建m行n列全为1的数组 |
np.full((m,n),a) | 创建m行n列全为a的数组 |
np.eye(n) | 创建n行n列的单位数组 |
array([a1,a2...an]) | 将输入数据存为数组格式 |
array()函数存为数组格式时,要注意是将列表作为一个元素存入。
2.1.1 一维数组
a = array([1,2,3,4])
输出为[1 2 3 4],一维数组
2.1.2. 二维数组
a = array( [ (1.5,2,3), (4,5,6) ] )
输出为
[[1.5 2. 3. ]
[4. 5. 6. ]]
2.2数组的属性
numpy数组类被称作ndarray,该对象有如下属性
ndarray.ndim | 数组轴的个数,即秩 |
ndarray.shape | 数组的维度 |
ndarray.size | 数组元素的个数 |
ndarray.dtype | 数组元素类型 |
ndarray.itemsize | 数组每个元素大小 |
2.3 数组的基本计算
数组的算数运算是按元素计算的。
2.3.1 减法
要么两个数组维数相同,要么减数维数为1(相当于常数)
a=array([20,30,40,50]) b=array([4]) c=a-b
输出结果c为[16 26 36 46],数组中每个元素都减去4
a=array([20,30,40,50]) b=array([1,2,3,4])
c=a-b
输出结果c为[19 28 37 46],a中元素减去b中对应元素
2.3.2 乘法
与减法相类似,以元素为单位计算
a=array([20,30,40,50]) b=array([1,2,3,4]) c=a*b
输出结果c为[ 20 60 120 200]
若想实现矩阵乘法,则用dot()
a=array([20,30,40,50]) b=array([[1],[2],[3],[4]]) d=dot(a,b)
输出结果d为[400],为1维数组,满足矩阵乘法规则
注意:!!!以上运算均不改变原数组,所得结果创建在一个新数组中。
但是+=,*=等操作将直接对原数组进行修改。
当进行运算的数组类型不同时,以最精确的为主。如整型数组与浮点型数组做运算,所得结果为浮点型数组
2.4 数组的轴运算
指定axis参数,可对数组执行轴运算,
axis=0,列运算
axis=1,行运算
a.sum(axis=0) | 每列和,返回一个一维数组,每个元素表示该列所有元素和 |
a.max(axis=0) | 每列最大元素,返回一个一维数组,每个元素表示该列最大值 |
a.cumsum(axis=0) | 每列叠加和,返回一个与原数组同等维数的数组,每个元素表示之前所有列元素和 |
a=array([[20,30,40,50], [1,2,3,4], [5,6,7,8]]) b=a.cumsum(axis=0)
输出结果b为
[[20 30 40 50]
[21 32 43 54]
[26 38 50 62]]
即21表示20+1,32表示30+2。。。。
2.5 数组的切片及索引
2.5.1 索引
a=array([[20,30,40,50], [1,2,3,4], [5,6,7,8]]) print(a[1][2])
输出结果为3,即第2行第3列元素
2.5.2 切片
切片操作,含首不含尾。如0-3,则取0,1,2三个元素
也支持倒着切片,如-1,则为最后一个元素,-3~-1,即为倒数第3个元素和倒数第2个元素。
切片也可以设置间隔,如每两个取一个,即L[0:10:2]
---恢复内容结束---