python是广泛使用的开源编程语言,通过调用numpy模块可以开展几乎所有数学运算。
矩阵形数组(以下简称“矩阵”)的相关运算是最常见的数学运算之一,numpy模块提供了多种矩阵定义子模块,现初步整理如下,供大家灵活取用。
【1】准备工作-安装和测试numpy模块
对于初学者,python编程优先推荐pycharm。
如果初次使用pycharm(默认该软件已经装好),安装numpy步骤为:
(1)在电脑底部搜索框输入cmd,打开命令提示符;
(2)在命令提示符中输入pip install numpy:
pip install numpy
(3)在pycharm中输入以下代码,如果不报错证明安装成功。
import numpy as np
【2】array定义矩阵
打开pycharm,输以下代码,尝试定义矩阵:
import numpy as np #引入numpy模块
a=np.array([1,2,3]) #使用array子模块定义一维矩阵
b=np.array([[1,2,3],[4,5,6]]) #使用array子模块定义二维矩阵
c=np.array([[1,2,3],[4,5,6],[7,8,9]]) #使用array子模块定义二维矩阵
print('a=',a) #输出一维矩阵
print('b=',b) #输出2X3二维矩阵
print('c=',c) #输出3X3二维矩阵
上述代码中,np就是numpy的缩写,np.array的意思是,在numpy这个大的模块中,调用array子模块来定义矩阵形数组。
运行上述模块,获得结果如下:
图1
【3】matrix定义矩阵
打开pycharm,输入以下代码,尝试定义矩阵:
import numpy as np #引入numpy模块
a=np.matrix([1,2,3]) #使用matrix子模块定义一维矩阵
b=np.matrix([[1,2,3],[4,5,6]]) #使用matrix子模块定义二维矩阵
c=np.matrix([[1,2,3],[4,5,6],[7,8,9]]) #使用matrix子模块定义二维矩阵
print('a=',a) #输出一维矩阵
print('b=',b) #输出2X3二维矩阵
print('c=',c) #输出3X3二维矩阵
上述代码中,np就是numpy的缩写,np.matrix的意思是,在numpy这个大的模块中,调用matrix子模块来定义矩阵形数组。
运行上述模块,获得结果如下:
图2
但是,注意到pycharm中出现了黄色提示,如图:
表明可能存在不影响结果的表达形式错误。为此,查阅numpy官方教程:
https://numpy.org/devdocs/reference/generated/numpy.matrix.html#numpy-matrix
看到numpy.matrix举例了两种定义矩阵的方法,上述代码就是方法B。由于该黄色提示不影响输出结果,因此将其直接忽略。
numpy官网举例如图:
此处学习官网教程,使用方法A再次定义矩阵,输入以下代码:
import numpy as np # 引入numpy模块
a = np.matrix('1,2,3') # 使用matrix子模块定义一维矩阵
b = np.matrix('1,2,3;4,5,6') # 使用matrix子模块定义二维矩阵
c = np.matrix('1,2,3;4,5,6;7,8,9') # 使用matrix子模块定义二维矩阵
print('a=', a) # 输出一维矩阵
print('b=', b) # 输出2X3二维矩阵
print('c=', c) # 输出3X3二维矩阵
运行上述模块,获得结果如图2。
【4】array和matrix定义矩阵显示结果区别
如果细心观察,马上会发现图1和图2并不一致:
图3
如图3所示,对于一维数组组成矩阵的表现形式,array矩阵和matrix矩阵输出结果完全不一致:
【a】在matrix例里,一维数组自身有一个方括号,然后最外侧还有一个方括号,也就是一维数组外侧有两层方括号;
【b】在array例里,一维数组外侧只有一层方括号。
基于上述发现,我们尝试做一维数组组成矩阵的减法,检验这种表达方式的不同,是否会有影响。
在pycharm中输入以下代码:
import numpy as np #引入numpy模块
a=np.array([1,2,3]) #使用array子模块定义一维矩阵
a1 = np.matrix('1,2,3') # 使用matrix子模块定义一维矩阵
print('a=', a) # 输出array子模块定义一维矩阵
print('a1=', a1) # 输出matrix子模块定义一维矩阵
b = a-a1 # (array子模块定义一维矩阵)-(matrix子模块定义一维矩阵)
print('a-a1=', b) # 输出3X3二维矩阵
c = a-a1 # (matrix子模块定义一维矩阵)-(array子模块定义一维矩阵)
print('a1-a=', c) # 输出3X3二维矩阵
运行上述模块,获得结果如下:
图4
如图4可见,无论是:
(array子模块定义一维矩阵)-(matrix子模块定义一维矩阵)
还是:
(matrix子模块定义一维矩阵)-(array子模块定义一维矩阵)
结果都是[[0 0 0]]
也即,array和matrix定义的一维矩阵作差,结构都按照matrix格式强行转化了。
【5】特殊矩阵定义
学习线性代数过程中,一些特殊矩阵举足轻重,numpy模块提供了直接定义它们的方法。
【5.1】纯0矩阵
在pycharm输入以下代码:
import numpy as np #引入numpy模块
a=np.zeros((2,3)) #定义2行3列全0矩阵
print('a=',a) #输出2行3列全0矩阵
b=np.zeros((5,6)) #定义5行6列全0矩阵
print('b=',b) #输出5行6列全0矩阵
运行上述模块,获得结果如下:
图5
【5.2】纯1矩阵
在pycharm输入以下代码:
import numpy as np #引入numpy模块
a=np.ones((3,1),dtype=int) #定义2行3列全1矩阵
print('a=',a) #输出2行3列全1矩阵
b=np.ones((3,3)) #定义5行6列全1矩阵
print('b=',b) #输出5行6列全1矩阵
运行上述模块,获得结果如下:
图6
观察图6,会发现矩阵b的数字1带了小数点,而矩阵a中的1没有小数点。
这是因为矩阵a在定义的时候指定了为整型数据,而矩阵b未指定,因此矩阵b默认为高精度的浮点型数据,从而显示出小数点。
【5.3】对角矩阵
在pycharm输入以下代码:
import numpy as np #引入numpy模块
a=np.eye(3) #定义3X3对角单位矩阵
print('a=',a)
b=np.eye(5,dtype=int) #定义5X5对角单位矩阵
print('b=',b)
c=np.eye(1,dtype=int) #定义1X1对角单位矩阵
print('c=',c)
运行上述模块,获得结果如下:
图7
观察图7,会发现矩阵a、b和c都是标准的对角单位矩阵。矩阵b和c定义时使用了dtype限定为整型。
【6】结语
本文初步总结了numpy模块直接定义矩阵的方法,对新手小白尤其友好。
欢迎大家一起督促学习,一同取得进步。