python生成单位阵或对角阵
前提:
1
|
import numpy as np |
1.identity
1
2
3
4
5
|
np.identity( 4 ) array([[ 1. , 0. , 0. , 0. ], [ 0. , 1. , 0. , 0. ], [ 0. , 0. , 1. , 0. ], [ 0. , 0. , 0. , 1. ]]) |
2.eye
1
2
3
4
5
|
np.eye( 4 ) array([[ 1. , 0. , 0. , 0. ], [ 0. , 1. , 0. , 0. ], [ 0. , 0. , 1. , 0. ], [ 0. , 0. , 0. , 1. ]]) |
3.diag(可以指定对角元素)
1
2
3
4
5
6
7
8
9
10
11
12
|
np.diag([ 1 ] * 4 ) Out[ 1 ]: array([[ 1 , 0 , 0 , 0 ], [ 0 , 1 , 0 , 0 ], [ 0 , 0 , 1 , 0 ], [ 0 , 0 , 0 , 1 ]]) np.diag([ 2 ] * 4 ) Out[ 2 ]: array([[ 2 , 0 , 0 , 0 ], [ 0 , 2 , 0 , 0 ], [ 0 , 0 , 2 , 0 ], [ 0 , 0 , 0 , 2 ]]) |
有趣的地方是前两种方法元素都是浮点数,最后一种是整数,使用的时候注意区分就好
python创建对角阵的np.eye()函数
最近博主在研究kalman滤波,里面初始矩阵定义需要对角阵,于是查了一些资料,发现numpy中有一个eye函数可以达到这样的目的
1
|
np.eye(N,M = None ,k = 0 ,dtype = < class 'float' >,order = 'C) |
-
N
表示输出的行数; -
M
表示输出的列数,不给默认等于N; -
K
默认等于0,表示主对角线,负数代表低对角,正数代表高对角; -
dtype
表示输出数据的类型; -
order
表示输出的数组的形式是按照C语言的行优先’C’,还是按照Fortran形式的列优先‘F’存储在内存中。
看下面两个例子就明白用法啦
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
a = np.eye( 4 ) print ( type (a)) print (a) a = np.mat(a) print ( type (a)) print (a) a = a.I print ( type (a)) print (a) >>>< class 'numpy.ndarray' > [[ 1. 0. 0. 0. ] [ 0. 1. 0. 0. ] [ 0. 0. 1. 0. ] [ 0. 0. 0. 1. ]] < class 'numpy.matrix' > [[ 1. 0. 0. 0. ] [ 0. 1. 0. 0. ] [ 0. 0. 1. 0. ] [ 0. 0. 0. 1. ]] < class 'numpy.matrix' > [[ 1. 0. 0. 0. ] [ 0. 1. 0. 0. ] [ 0. 0. 1. 0. ] [ 0. 0. 0. 1. ]] |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
a = np.eye( 4 ,k = 1 ) print ( type (a)) print (a) a = np.mat(a) print ( type (a)) print (a) a = a.T print ( type (a)) print (a) >>>< class 'numpy.ndarray' > [[ 0. 1. 0. 0. ] [ 0. 0. 1. 0. ] [ 0. 0. 0. 1. ] [ 0. 0. 0. 0. ]] < class 'numpy.matrix' > [[ 0. 1. 0. 0. ] [ 0. 0. 1. 0. ] [ 0. 0. 0. 1. ] [ 0. 0. 0. 0. ]] < class 'numpy.matrix' > [[ 0. 0. 0. 0. ] [ 1. 0. 0. 0. ] [ 0. 1. 0. 0. ] [ 0. 0. 1. 0. ]] |
动动小手,感悟一下就好啦!以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq_41542989/article/details/111587600