1、array和mat区别
Python中的numpy包是一个科学计算包,在进行科学计算时多数情况下都会用到这个包,但是其中的array和mat这两个函数的区别还是要注意。数据的类型很有可能是程序出现bug的一个难以发现的原因(自身教训)
if __name__ == '__main__':
# 一维
two = [1, 3, 5, 2, 3, 2]
two1 = np.array(two)
print(two) # [1, 3, 5, 2, 3, 2] type:list
print(two1) # [1 3 5 2 3 2] type:tuple
print(two1.shape) # (6,)
print(two1.tolist()) # [1, 3, 5, 2, 3, 2] type:list
print(len(two1.tolist())) # 6
two2 = np.mat(two)
print(two2) # [[1 3 5 2 3 2]] type:tuple
print(two2.shape) # (1, 6)
print(two2.tolist()) # [[1, 3, 5, 2, 3, 2]] type:list
print(len(two2.tolist())) # 1
可以看到array和mat还是有所不同的。
- array: 将list直接转换成了数组,包括但不限于一维的list
- mat: 将list中的数据转换成了矩阵
所以在使用命令tolist
进行对array转换后可以转换成原来的样子,对mat类型转换后会和原来有所不同。
这里的区别在1维情况下表现的很明显。对于下面的多纬情况没啥差别。
对于多维的list,array和mat基本没有差别:但是在 * 操作时候是有差别的
# 多维数组
two = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
two1 = np.array(two)
print(two)
'''
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
'''
print(two1)
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]
[17 18 19 20]]
'''
print(two1.shape) # (5, 4)
print(two1.tolist())
'''
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
'''
print(len(two1.tolist())) # 5
two2 = np.mat(two)
print(two2)
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]
[17 18 19 20]]
'''
print(two2.shape) # (5, 4)
print(two2.tolist())
'''
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16], [17, 18, 19, 20]]
'''
print(len(two2.tolist())) # 5
two3=two1.T # 数组转置
two4=two2.T # 矩阵转置
Y=two1 * two1 # 数组相乘:各元素对应相乘
'''
[[ 1 4 9 16]
[ 25 36 49 64]
[ 81 100 121 144]
[169 196 225 256]
[289 324 361 400]]
'''
#Y1 = np.dot(two1, two1) # dot()函数是矩阵乘,而*则表示逐个元素相乘; 5x4 和 5x4 矩阵乘报错
Y1 = np.dot(two1, two1.T) # 可以将two1其转置 然后矩阵乘
'''
[[ 30 70 110 150 190]
[ 70 174 278 382 486]
[ 110 278 446 614 782]
[ 150 382 614 846 1078]
[ 190 486 782 1078 1374]]
'''
Y4 = two2 * two2.T # 矩阵相乘:等同于 p.dot(two2, two2.T)
'''
[[ 30 70 110 150 190]
[ 70 174 278 382 486]
[ 110 278 446 614 782]
[ 150 382 614 846 1078]
[ 190 486 782 1078 1374]]
'''
总结:numpy中array(数组)和mat(矩阵)的区别
matrix是array的分支,matrix和array在很多时候都是通用的,你用哪一个都一样。但这时候,官方建议大家如果两个可以通用,那就选择array,因为array更灵活,速度更快,很多人把二维的array也翻译成矩阵。
但是matrix的优势就是相对简单的运算符号,比如两个矩阵相乘,就是用符号*,但是array相乘不能这么用,得用方法.dot()
array的优势就是不仅仅表示二维,还能表示3、4、5…维,而且在大部分Python程序里,array也是更常用的。
dot方法的使用
参考博客: https://www.cnblogs.com/Shawnyi/p/10370815.html
array(数组)和mat(矩阵)
X[:,0]就是取矩阵X的所有行的第0列的元素,X[:,1] 就是取所有行的第1列的元素。
X[:, m:n]即取矩阵X的所有行中的的第m到n-1列数据,含左不含右。
X[0,:]就是取矩阵X的第0行的所有元素,X[1,:]取矩阵X的第一行的所有元素。
print(two1[0,:])
'''
[1 2 3 4]
'''
print(two2[:,0])
'''
[[ 1]
[ 5]
[ 9]
[13]
[17]]
'''