在科学计算中,我们经常需要生成单位矩阵,即主对角线上元素全为1的矩阵。那么如何能够生成主对角线上全为1的矩阵呢?这里我们介绍三种方法。
方法一: np.eye():返回一个对角线上是1,其他位置上全是0的二维矩阵。 代码如下:
import numpy as npclass Debug: def mainProgram(self): x1 = np.eye(2) print(x1) if __name__ == "__main__": main = Debug() main.mainProgram()"""result:[[1. 0.] [0. 1.]]"""我们可以看到对于一个2*2的矩阵,对角元素全部为1,其他位置的元素全部为0。
然而这个矩阵的用法远不仅仅于此,我们可以设置它的另一个k参数来调整我们想要选取的对角线位置,默认值k为0,代表从左上方到右下方的对角线。k为1,-1,2的情况如下面的代码所示:
import numpy as npclass Debug: def mainProgram(self): x1 = np.eye(2, k =1) print(x1) x2 = np.eye(2, k =-1) print(x2) x3 = np.eye(2, k =2) print(x3) if __name__ == "__main__": main = Debug() main.mainProgram()"""x1:[[0. 1.] [0. 0.]]x2:[[0. 0.] [1. 0.]]x3:[[0. 0.] [0. 0.]]"""我们可以看到k=1时,选取的对角线会向右上方移动一个位置,k=-1时,选取的对角线会向左下方移动一个位置,当k=2时,理论上选取的对角线会向右上方移动两个位置,但是因为我们初始化的是一个2*2的矩阵,所以当选取的对角线向右上方移动两个位置时,已经超出了我们初始化的矩阵大小,因此所有矩阵值均为0。
方法二: np.identity():返回一个对角线上是1,其他位置上全是0的二维矩阵。
import numpy as npclass Debug: def mainProgram(self): x = np.identity(2) print(x)if __name__ == "__main__": main = Debug() main.mainProgram()"""result:[[1. 0.] [0. 1.]]"""该函数与np.eye()函数的区别在于,np.identity()函数是np.eye()函数的特殊形式,也就是只能够生成主对角线全部为1的矩阵,简而言之,np.eye()函数包含np.identity()函数。
方法三: np.diag():返回一个提取的对角数组或者创建一个对角数组。
import numpy as npclass Debug: @staticmethod def mainProgram(): x = np.diag([1] * 2) print(x)if __name__ == "__main__": main = Debug() main.mainProgram()"""result:[[1 0] [0 1]]"""那么如何生成一个反对角线上全部为1的矩阵呢?请看使用numpy包生成反对角线上全为1的矩阵(超