python生成单位阵或对角阵的三种方式小结

目录
  • python生成单位阵或对角阵
    • 1.identity
    • 2.eye
    • 3.diag(可以指定对角元素)
  • python创建对角阵的np.eye()函数
    • 看下面两个例子就明白用法啦

python生成单位阵或对角阵

前提:

import numpy as np

1.identity

np.identity(4)
array([[ 1., 0., 0., 0.],
       [ 0., 1., 0., 0.],
       [ 0., 0., 1., 0.],
       [ 0., 0., 0., 1.]])

2.eye

np.eye(4)
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])

3.diag(可以指定对角元素)

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函数可以达到这样的目的

np.eye(N,M=None,k=0,dtype=<class 'float'>,order='C)
  • N表示输出的行数;
  • M表示输出的列数,不给默认等于N;
  • K默认等于0,表示主对角线,负数代表低对角,正数代表高对角;
  • dtype表示输出数据的类型;
  • order表示输出的数组的形式是按照C语言的行优先’C’,还是按照Fortran形式的列优先‘F’存储在内存中。

看下面两个例子就明白用法啦

    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.]]
    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.]]

动动小手,感悟一下就好啦!以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • python实现由数组生成对称矩阵

    在实际应用中,经常会遇上这样的小需求:根据一段给定的数组,生成由这一段数组值构成的对称矩阵. 例如,给定数组[1,2,3,4,5,6,7,8,9,10],要求生成如下的矩阵: [[0,1,2,3,4], [1,0,5,6,7], [2,5,0,8,9], [3,6,8,0,10], [4,7,9,10,0]] 其中,对角元全为0,该类型的矩阵完全由给定的数组决定. 笔者给出实现以上功能的一种python参考代码如下: def semi_to_full(m): import numpy as np

  • numpy创建单位矩阵和对角矩阵的实例

    在学习linear regression时经常处理的数据一般多是矩阵或者n维向量的数据形式,所以必须对矩阵有一定的认识基础. numpy中创建单位矩阵借助identity()函数.更为准确的说,此函数创建的是一个n*n的单位数组,返回值的dtype=array数据形式.其中接受的参数有两个,第一个是n值大小,第二个为数据类型,一般为浮点型.单位数组的概念与单位矩阵相同,主对角线元素为1,其他元素均为零,等同于单位1.而要想得到单位矩阵,只要用mat()函数将数组转换为矩阵即可. >>>

  • Python numpy中矩阵的基本用法汇总

    Python矩阵的基本用法 mat()函数将目标数据的类型转化成矩阵(matrix) 1,mat()函数和array()函数的区别 Numpy函数库中存在两种不同的数据类型(矩阵matrix和数组array),都可以用于处理行列表示的数字元素,虽然他们看起来很相似,但是在这两个数据类型上执行相同的数学运算可能得到不同的结果,其中Numpy函数库中的matrix与MATLAB中matrices等价. 直接看一个例子: import numpy as np a = np.mat('1 3;5 7')

  • python生成单位阵或对角阵的三种方式小结

    目录 python生成单位阵或对角阵 1.identity 2.eye 3.diag(可以指定对角元素) python创建对角阵的np.eye()函数 看下面两个例子就明白用法啦 python生成单位阵或对角阵 前提: import numpy as np 1.identity np.identity(4) array([[ 1., 0., 0., 0.], [ 0., 1., 0., 0.], [ 0., 0., 1., 0.], [ 0., 0., 0., 1.]]) 2.eye np.ey

  • python 使用elasticsearch 实现翻页的三种方式

    使用ES做搜索引擎拉取数据的时候,如果数据量太大,通过传统的from + size的方式并不能获取所有的数据(默认最大记录数10000),因为随着页数的增加,会消耗大量的内存,导致ES集群不稳定.因此延伸出了scroll,search_after等翻页方式. 一.from + size 浅分页 "浅"分页可以理解为简单意义上的分页.它的原理很简单,就是查询前20条数据,然后截断前10条,只返回10-20的数据.这样其实白白浪费了前10条的查询. GET test/_search { &

  • Python实现列表拼接和去重的三种方式

    目录 列表拼接三种方式 方式一:简简单单的"+" 方法二:切片赋值 方式三:列表自带的extend() 列表去重的三种方式 利用集合set的特性 利用字典key的不可重复属性 利用index()获取到的是第一次出现的索引 列表拼接三种方式 列表拼接主要有以下三种方式: 最简单的使用"+"; 使用切片赋值的方法: 使用列表自带的extend方法 方式一:简简单单的"+" >>> list1 = [1,2,3] >>&g

  • Python绘制散点密度图的三种方式详解

    目录 方式一 方式二 方式三 方式一 import matplotlib.pyplot as plt import numpy as np from scipy.stats import gaussian_kde from mpl_toolkits.axes_grid1 import make_axes_locatable from matplotlib import rcParams config = {"font.family":'Times New Roman',"fo

  • Maven打jar包的三种方式(小结)

    不包含依赖jar包 该方法打包的jar,不包含依赖的jar包,也没有指定入口类. <build> <plugins> <plugin> <!-- 指定项目编译时的java版本和编码方式 --> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.

  • MySQL复制表的三种方式(小结)

    复制表结构及其数据 下面这个语句会拷贝数据到新表中. 注意:这个语句其实只是把select语句的结果建一个表,所以新表不会有主键,索引. create table table_name_new as (select * from table_name_old); 只复制表结构 create table table_name_new as select * from table_name_old where 1=2; 或者 create table table_name_new like tabl

  • MySQL删除表的三种方式(小结)

    drop table drop 是直接删除表信息,速度最快,但是无法找回数据 例如删除 user 表: drop table user; truncate (table) truncate 是删除表数据,不删除表的结构,速度排第二,但不能与where一起使用 例如删除 user 表: truncate table user; delete from delete 是删除表中的数据,不删除表结构,速度最慢,但可以与where连用,可以删除指定的行 例如删除user表的所有数据 delete fro

  • mybatis-plus update更新操作的三种方式(小结)

    目录 1.@ 根据id更新 2.@ 条件构造器作为参数进行更新 3.@ lambda构造器 mybatisplus update语句为null时没有拼接上去 1.@ 根据id更新 User user = new User(); user.setUserId(1); user.setAge(29); userMapper.updateById(user); 2.@ 条件构造器作为参数进行更新 //把名字为rhb的用户年龄更新为18,其他属性不变 UpdateWrapper<User> updat

  • Spring配置数据源的三种方式(小结)

    目录 一.前言 三.开发数据源的方式 方式1:手动输入 方式2:Properties配置文件 方式3:Spring配置数据源 四.总结 一.前言 今天学习了用spring配置Druid数据源的三种方式,整理了学习笔记,希望大家喜欢! 二.数据源的作用 数据源(连接池)是提高程序性能如出现的 事先实例化数据源,初始化部分连接资源 使用连接资源时从数据源中获取 使用完毕后将连接资源归还给数据源 常见的数据源:DBCP.C3P0.BoneCP.Druid等等,本文主要以Druid数据源为案例实现Spr

  • Shell 脚本自动输入密码的三种方式小结

    目录 方式一 方式二 方式三 注意,如果创建.sh文件后不可以执行,请执行sudo chmod 755 文件名.sh来修改权限. 方式一 使用 echo “密码” | (管道符) 使用场景: sudo 命令 在使用普通用户执行 root 命令时有时候会需要输入密码,并且在输入密码后一段时间不需要再次输入(但是不影响),这时候可以使用 echo "密码" | sudo 命令 比如我需要一键清空服务器,则可以创建一个clear.sh文件(假使我的密码是 123456): echo &quo

随机推荐