python 矩阵分成上三角下三角和对角三个矩阵
diagonal
- Return specified diagonals.
diagflat
- Create a 2-D array with the flattened input as a diagonal.
trace
- Sum along diagonals.
triu
- Upper triangle of an array.
tril
- Lower triangle of an array.
- 先讲一个方阵的对角线下的下三角阵和对角线上的上三角阵提取出来(如果只需要上下三角阵,则去掉tril/triu中的第二个参数)
- 上代码(这里使用tril和triu都是返回array形式,还需使用mat转换回矩阵):
-
>>> m = np.mat("1,2,3;4,5,6;7,8,9") >>> m matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> L = np.tril(m,-1) >>> L array([[0, 0, 0], [4, 0, 0], [7, 8, 0]]) >>> U = np.triu(m,1) >>> U array([[0, 2, 3], [0, 0, 6], [0, 0, 0]])
而单独要提取对角线上的元素作为一个矩阵有如下两种方法:
1、运用np.diag两次,再使用mat转换回矩阵:
>>> D = np.diag(np.diag(m)) >>> D array([[1, 0, 0], [0, 5, 0], [0, 0, 9]]) >>> D = np.mat(D) >>> D matrix([[1, 0, 0], [0, 5, 0], [0, 0, 9]])
2、运用下三角矩阵减去次下三角矩阵(即对角线下的下三角阵):
>>> D = np.tril(m) - L >>> D array([[1, 0, 0], [0, 5, 0], [0, 0, 9]]) >>> D = np.mat(D) >>> D matrix([[1, 0, 0], [0, 5, 0], [0, 0, 9]])