创建NumPy矩阵
mat函数创建矩阵时,若输入matrix或ndarray对象,则不会为它们创建副本。因此,调用mat函数和调用matrix(data, copy=False)等价,如代码 4-1所示。
代码 4-1 使用mat函数与matrix函数创建矩阵
| In[1]: | import numpy as np #导入NumPy库 matr1 = np.mat("1 2 3;4 5 6;7 8 9") #使用分号隔开数据 print('创建的矩阵为:',matr1) |
| Out[1]: | 创建的矩阵为: [[1 2 3] [4 5 6] [7 8 9]] |
| In[2]: | matr2 = np.matrix([[123],[456],[789]]) print('创建的矩阵为:',matr2) |
| Out[2]: | 创建的矩阵为: [[123] [456] [789]] |
很多时候会根据小的矩阵创建大的矩阵,即将小矩阵组合成大矩阵。在NumPy中可以使用bmat分块矩阵(block matrix)函数实现,如代码 42所示。
代码 4-2 使用bmat函数创建矩阵
| In[3]: | arr1 = np.eye(3) print('创建的数组1为:',arr1) |
| Out[3]: | 创建的数组1为: [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]] |
| In[4]: | arr2 = 3*arr1 print('创建的数组2为:',arr2) |
| Out[4]: | 创建的数组2为: [[ 3. 0. 0.] [ 0. 3. 0.] [ 0. 0. 3.]] |
| In[5]: | print('创建的矩阵为:',np.bmat("arr1 arr2; arr1 arr2")) |
| Out[5]: | 创建的矩阵为: [[ 1. 0. 0. 3. 0. 0.] [ 0. 1. 0. 0. 3. 0.] [ 0. 0. 1. 0. 0. 3.] [ 1. 0. 0. 3. 0. 0.] [ 0. 1. 0. 0. 3. 0.] [ 0. 0. 1. 0. 0. 3.]] |
在NumPy中矩阵计算是针对整个矩阵中的每个元素,比起使用for循环在运算速度上更加高效,如代码 43所示。
代码 4-3 矩阵运算
| In[6]: | matr1 = np.mat("2 2 3;1 -1 0;-1 2 1") #创建矩阵 print('创建的矩阵为:',matr1) |
| Out[6]: | 创建的矩阵为: [[ 2 2 3] [ 1 -1 0] [-1 2 1]] |
| In[7]: | matr2 = matr1*3 #矩阵与数相乘 print('创建的矩阵为:',matr2) |
| Out[7: | 创建的矩阵为: [[ 6 6 9] [ 3 -3 0] [-3 6 3]] |
| In[8]: | print('矩阵相加结果为:',matr1+matr2) #矩阵相加 |
| Out[8]: | 矩阵相加结果为: [[ 8 8 12] [ 4 -4 0] [-4 8 4]] |
| In[9]: | print('矩阵相减结果为:',matr1-matr2) #矩阵相减 |
| Out[9]: | 矩阵相减结果为: [[-4 -4 -6] [-2 2 0] [ 2 -4 -2]] |
| In[10]: | print('矩阵相乘结果为:',matr1*matr2) #矩阵相乘 |
| Out[10]: | 矩阵相乘结果为: [[ 9 24 27] [ 3 9 9] [-3 -6 -6]] |
| In[11]: | print('矩阵对应元素相乘的结果为:',np.multiply(matr1,matr2)) #矩阵对应元素相乘 |
| Out[11]: | 矩阵对应元素相乘的结果为: [[12 12 27] [ 3 3 0] [ 3 12 3]] |
矩阵属性的具体查看方法,如代码 4-4所示。
代码 4-4 查看矩阵属性
| In[12]: | print('矩阵转置结果为:',matr1.T) #转置 |
| Out[12]: | 矩阵转置结果为: [[ 2 1 -1] [ 2 -1 2] [ 3 0 1]] |
| In[13]: | print('矩阵共轭转置结果为:',matr1.H) #共轭转置(实数的共轭就是其本身) |
| Out[13]: | 矩阵共轭转置结果为: [[ 2 1 -1] [ 2 -1 2] [ 3 0 1]] |
| In[14]: | print('矩阵的逆矩阵结果为:',matr1.I) #逆矩阵 |
| Out[14]: | 矩阵的逆矩阵结果为: [[ 1. -4. -3.] [ 1. -5. -3.] [-1. 6. 4.]] |
| In[15]: | print('矩阵的二维数组结果为:',matr1.A) #返回二维数组的视图 |
| Out[15]: | 矩阵的二维数组结果为: [[ 2 2 3] [ 1 -1 0] [-1 2 1]] |



