本人CSDN博客专栏:https://blog.csdn.net/yty_7
Github地址:https://github.com/yot777/
Python在引入numpy模块之前,只能使用一维列表例如[1,2,3]。引入了numpy模块之后,可以扩展到二维、三维直到n维数组。
在使用数组或矩阵之前都必须在Python程序的第一行加上
import numpy as np
array:数组
matrix(可简写为mat):矩阵
matrix是array的分支,matrix和array在表示二维的时候基本上是通用的(例如两者都可以进行转置)。
但在非二维的情况下,有以下显著不同:
matrix仅能表示二维矩阵,即使输入的是一个一维列表,也会把它强制转为二维矩阵。
array不仅能表示二维数组,还能表示1、3、4、5...n维,二维数组也可以叫做矩阵。
Python官方建议在两个都可以使用的场合选择array,因为array更灵活,速度更快。
数组和矩阵的维度表达式(m,n):m是行数,n是列数
使用shape()函数可以得到数组(或矩阵)的行数和列数(m,n)
特别的,当m=1时的二维数组(1,n)称为行向量,当n=1的二维数组(m,1)称为列向量。列向量可以简称为向量。
数组和矩阵既可以直接用np.array()函数定义,也可以用列表转换而来。
注意列表元素之间用逗号分隔,但数组元素之间用空格分隔。
数组或矩阵都可以做行列互换,称为转置,用.T或者transpose()函数来实现。
#数组和矩阵转置举例
import numpy as np
p=[[1,2]]
p.append([3,4])
p.append([5,6])
#q是二维数组
q=np.array(p)
print("q=\n",q)
print("q的维度是",np.shape(q))
#s是二维数组q的转置
s=q.T
print("s=\n",s)
print("s的维度是",np.shape(s))
#u是矩阵
u=np.matrix(p)
print("u=\n",u)
print("u的维度是",np.shape(u))
#v是矩阵u的转置
v=u.transpose()
print("v=\n",v)
print("v的维度是",np.shape(v))
运行结果:
q=
[[1 2]
[3 4]
[5 6]]
q的维度是 (3, 2)
s=
[[1 3 5]
[2 4 6]]
s的维度是 (2, 3)
u=
[[1 2]
[3 4]
[5 6]]
u的维度是 (3, 2)
v=
[[1 3 5]
[2 4 6]]
v的维度是 (2, 3)
怎样判断数组的维度呢?连续左括号(右括号也可以)的个数有几个就是几维数组。
例如:array([1,2,3])是一维数组,array([[1,2],[3,4],[5,6]])是二维数组,
array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]],[[13,14,15],[16,17,18]]])是三维数组。
列表维度举例:
#列表维度举例
import numpy as np
a=np.array([1,2,3])
b=np.array([[1,2],[3,4],[5,6]])
c=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]],[[13,14,15],[16,17,18]]])
print("a=\n",a)
print("a的维度是",np.shape(a))
print("b=\n",b)
print("b的维度是",np.shape(b))
print("c=\n",c)
print("c的维度是",np.shape(c))
运行结果:
a=
[1 2 3]
a的维度是 (3,)
b=
[[1 2]
[3 4]
[5 6]]
b的维度是 (3, 2)
c=
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]
[[13 14 15]
[16 17 18]]]
c的维度是 (3, 2, 3)
对于数组c的维度 (3, 2, 3)怎样理解呢?其实就是3个(2,3)二维数组。
一维数组举例:
import numpy as np
array1=np.array([1,2,3])
print("array1=\n",array1)
print("array1的维度是",np.shape(array1))
mat1=np.mat([1,2,3])
print("mat1=\n",mat1)
print("mat1的维度是",np.shape(mat1))
运行结果:
array1=
[1 2 3]
array1的维度是 (3,)
mat1=
[[1 2 3]]
mat1的维度是 (1, 3)
可见matrix将一维列表强制变成了二维矩阵(1,3)。
矩阵的维度不能超过2,否则会报错:
#矩阵的维度超过2
import numpy as np
mat5=np.mat([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]],[[13,14,15],[16,17,18]]])
print("mat5=\n",mat5)
print("mat5的维度是",np.shape(mat5))
运行结果:
mat4=
[[1 2 3]
[4 5 6]]
mat4的维度是 (2, 3)
Traceback (most recent call last):
File "test1.py", line 7, in
mat5=np.mat([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]],[[13,14,15],[16,17,18]]])
File "C:\Users\yty7\AppData\Roaming\Python\Python36\site-packages\numpy\matrixlib\defmatrix.py", line 71, in asmatrix
return matrix(data, dtype=dtype, copy=False)
File "C:\Users\yty7\AppData\Roaming\Python\Python36\site-packages\numpy\matrixlib\defmatrix.py", line 151, in __new__
raise ValueError("matrix must be 2-dimensional")
ValueError: matrix must be 2-dimensional
可见,matrix不支持三维矩阵,因此程序报错:matrix must be 2-dimensional
两个矩阵相乘,用符号*即可,但是array作为矩阵相乘要使用方法.dot()
array如果用*号直接相乘,得到的是两个矩阵中对应元素的乘积。
矩阵相乘的简单记忆法:m行n列矩阵,可以和它相乘的矩阵必须是n行,矩阵(m,n)乘以矩阵(n,s)得到新的矩阵是(m,s)
numpy.array乘法和dot()乘法举例:
import numpy as np
array1=np.array([[1,2,3],[4,5,6],[7,8,9]])
array2=np.array([[1],[2],[3]])
print("array1=\n",array1)
print("array2=\n",array2)
#数组相乘
array3 = array1*array2
print("array3=\n",array3)
#数组dot()相乘
array4 = array1.dot(array2)
print("array4=\n",array4)
运行结果:
array1=
[[1 2 3]
[4 5 6]
[7 8 9]]
array2=
[[1]
[2]
[3]]
array3=
[[ 1 2 3]
[ 8 10 12]
[21 24 27]]
array4=
[[14]
[32]
[50]]
可见,array作为矩阵相乘要使用方法.dot(),array如果用*号直接相乘,得到的是两个矩阵中对应元素的乘积。
numpy.matrix乘法举例:
import numpy as np
mat1=np.mat([[1,2,3],[4,5,6],[7,8,9]])
mat2=np.mat([[1],[2],[3]])
print("mat1=\n",mat1)
print("mat2=\n",mat2)
#矩阵相乘
mat3 = mat1*mat2
print("mat3=\n",mat3)
#矩阵dot()相乘
mat4 = mat1.dot(mat2)
print("mat4=\n",mat4)
运行结果:
mat1=
[[1 2 3]
[4 5 6]
[7 8 9]]
mat2=
[[1]
[2]
[3]]
mat3=
[[14]
[32]
[50]]
mat4=
[[14]
[32]
[50]]
实际上在大部分Python程序里,array更常用。
numpy的array数组和matrix矩阵在二维情况下相似。
matrix仅能表示二维矩阵。array不仅能表示二维数组,还能表示1、3、4、5...n维。
数组和矩阵的维度表达式(m,n):m是行数,n是列数。
特别的,当m=1时的二维数组(1,n)称为行向量,当n=1的二维数组(m,1)称为列向量。列向量可以简称为向量。
两个矩阵相乘,用符号*即可,但是array作为矩阵相乘要使用方法.dot()
array如果用*号直接相乘,得到的是两个矩阵中对应元素的乘积。
m行n列矩阵,可以和它相乘的矩阵必须是n行,矩阵(m,n)乘以矩阵(n,s)得到新的矩阵是(m,s)
本人CSDN博客专栏:https://blog.csdn.net/yty_7
Github地址:https://github.com/yot777/
如果您觉得本篇本章对您有所帮助,欢迎关注、评论、点赞!Github欢迎您的Follow、Star!