矩阵和数组的区别

---恢复内容开始---

区别:

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]

 

---恢复内容结束---

posted @ 2018-11-07 15:20  小小小小小码农  阅读(8555)  评论(0编辑  收藏  举报