当前位置: 首页 > news >正文

Python学习(2)-NumPy矩阵与通用函数

文章首发于:My Blog 欢迎大佬们前来逛逛

1. NumPy矩阵

1.1 mat函数

mat=asmatrix
asmatrix(data, dtype=None):

data:表示输入的数组或者字符串,使用‘,’分割列,使用‘;’分割行

创建两个普通的矩阵:

print(np.mat([1, 2, 3]))
print(np.mat("1,2,3;4,5,6;7,8,9"))
--------
[[1 2 3]]
[[1 2 3][4 5 6][7 8 9]]

需要注意:mat创建的矩阵是不会产生副本的,即共享内存

a1 = np.array([1, 2, 3, 4, 5])
ma1 = np.mat(a1)
ma1[0, 0] = 100
print(ma1)
print(a1)   # a1[0,0]也会改变
---------
[1 2 3 4 5]
[[100   2   3   4   5]]
[100   2   3   4   5]

1.2 matrix函数

matrix也是创建矩阵的:

 matrix(data, dtype=None, copy=True)

data:数组或者字符串,与mat一样

copy:表示创建的矩阵与原数组data是不是拷贝的如果是拷贝的,则不共享内存;否则共享内存

注意到:mat默认共享内存,matrix可以选择拷贝,他们的不同仅此而已

print(np.matrix([1, 2, 3, 4, 5]))
print(np.matrix('1,2,3;4,5,6'))
a1 = np.array([1, 2, 3, 4, 5])
ma1 = np.matrix(a1, copy=True)
ma1[0, 0] = 100
print(a1) # 不变
----------
[[1 2 3 4 5]]
[[1 2 3][4 5 6]]
[1 2 3 4 5]

1.3 bmat函数

bmat可以产生一个分块矩阵

bmat(obj, ldict=None, gdict=None)

obj:数组或者字符串

ldict,gdict:字典

a1 = np.arange(4).reshape(2, 2)
a2 = np.arange(5, 9).reshape(2, 2)
print(a1)
print(a2)
print(np.bmat([a1, a2]))
print(np.bmat('a1,a2;a2,a1')) # 四块 2*2 矩阵合并成一个大的4*4的矩阵
---------
[[0 1][2 3]]
[[5 6][7 8]]
[[0 1 5 6][2 3 7 8]][[0 1 5 6][2 3 7 8][5 6 0 1][7 8 2 3]]

1.4 矩阵运算

我们所熟知的运算,NumPy矩阵运算都可以实现:

print(a1 + a2)
print(a1 - a2)
print(a1 * a2) # 注意只能是满足矩阵运算条件 即 m*n 的m的列数要等与n的行数,结果为m的行数*n的列数
print(a1 / a2)
print(a1 ** a2)  
---------
[[ 5  7][ 9 11]]
[[-5 -5][-5 -5]]
[[ 0  6][14 24]]
[[0.         0.16666667][0.28571429 0.375     ]]
[[   0    1][ 128 6561]]

矩阵的特有属性:

  • T:转置
  • H:共轭转置
  • I:逆矩阵
  • A:转换为二维数组
a2 = np.matrix('1,2,3;4,5,6;7,8,9')
print(a2.T)  # 求转置
print(a2.H)  # 共轭转置
print(a2.I)  # 逆矩阵
print(a2.A)  # 自身的二维数组

2. NumPy通用函数

2.1 ufunc运算函数

注意:ufunc的运算操作是对于数组的运算,而不是矩阵,矩阵的运算是 NumPy 实现的。

ufunc的运算不是矩阵的运算,因此对于不符合矩阵乘法条件的两个数组相乘是合法的。

np.all:对于数组的元素需要全部满足

np.any:对于数组的元素只需要存在即可

创建数组:

a3 = np.array([1, 2, 3])
a4 = np.array([2, 3, 4])
print(a3 + a4)
# ....
print(np.all(a3 > 2))  # a3全部元素大于2
print(np.any(a3 > 2))  # a3任意一个元素大于2
-------
[3 5 7]
False
True

2.2 ufunc广播机制

对于数组的运算,我们会对数组的shape有要求;但是如果shape不一样,我们仍然可以对他们进行运算操作,只需要对他们使用广播机制即可。

广播机制必须满足的前提条件:

  1. 两个数组必须具有相同的维数,每个维的长度要么是相同的,要么是1
  2. 维数少的数组需要在其形状上加上n个长度为1的维数,以便使得满足条件1.

例子1:

a1数组是 2行4列的,a2数组是 1行4列的。

我们可以发现,a2数组的行数少 1,因此需要在a2的shape上对其行数加1,使得a2数组变为(2,4),那么他们的形状相同模拟为使得在B的末尾新添加一行与第一行相同的元素,因此可以相加,总结为:

A.shape=(2,4) ;B.shape=(1,4) ----> B.shape=(2,4)

然后再执行A与B相加。

a1 = np.random.randint(0, 8, (2, 4))
a2 = np.random.randint(0, 4, 4)
print(a1)
print(a2)
print(a1 + a2)
-------
[[7 6 3 5][2 7 5 2]][1 3 0 2][[ 8  9  3  7][ 3 10  5  4]]

例子2:

此时我们的a1的shape是 4行3列,a2的shape是 4行1列,因此需要在a2的shape中对a2的列数加1,直到他们的shape相同,使得a2也变为 4行3列的,模拟在a2的后面新添加两列与第一列相同的元素即可

A,shape=(4,3) B.shape=(4,1) ----> B.shape=(4,3)

然后再执行相加。

a1 = np.random.randint(0, 12, (4, 3))
a2 = np.random.randint(0, 4, (4, 1))
print(a1)
print(a2)
print(a1 + a2)
---------
[[ 0  6  6][11  1  3][ 4 10  6][11  1  4]][[3][1][2][3]][[ 3  9  9][12  2  4][ 6 12  8][14  4  7]]

2.3 统计分析函数

2.3.1 排序函数

sort函数直接对对象数组进行升序排序:

a1 = np.random.randint(10, 20, 10)
a1.sort()
print(a1)
-----------
[11 11 12 12 13 15 16 16 18 19]

使用 np.sort() 对数组排序后生成一份拷贝

a1 = np.random.randint(10, 20, 10)
print(np.sort(a1))
print(a1)
--------
[10 10 11 12 13 13 13 15 15 18]
[13 12 15 13 13 11 10 18 15 10]

argsort函数会产生索引数组,其中索引表示的是按照升序排序后,对应位置的元素在原数组中的对应的索引位置

例如新生成的索引数组的 :

  • [0] = 8,表示这个排序后的值[0]位置的值在原数组中是第8个(下标0开始),为10
  • [1] = 1,表示为第1个,为 11
  • [2] = 2,表示为第2个,为 11

a1 = np.random.randint(10, 20, 10)
print(a1)
print(a1.argsort())
----------
[16 11 11 18 17 15 17 19 10 15]
[8 1 2 5 9 0 4 6 3 7]

lexsort表示对多个键的数组进行间接排序,也是返回一个索引数组。

2.3.2 去重与重复函数

unique函数的作用是去掉重复的元素

a1 = np.random.randint(10, 20, 10)
print(a1)
print(np.unique(a1))
---------
[15 13 18 14 15 15 12 17 18 16]
[12 13 14 15 16 17 18]

unique可以指定参数

  • return_index:是否返回唯一元素的索引
  • return_inverse:是否返回用索引重建的数组
  • return_counts:是否返回唯一数组中元素出现的次数
a1 = np.random.randint(10, 20, 10)
print(a1)
print(np.unique(a1, return_index=True))   # 返回唯一元素的索引值
print(np.unique(a1, return_inverse=True))# 使用唯一索引重建数组
print(np.unique(a1, return_counts=True)) # 统计唯一数组的元素出现的次数
----------
[10 13 15 19 10 15 15 14 13 17]
(array([10, 13, 14, 15, 17, 19]), array([0, 1, 7, 2, 9, 3], dtype=int64))
(array([10, 13, 14, 15, 17, 19]), array([0, 1, 3, 5, 0, 3, 3, 2, 1, 4], dtype=int64))
(array([10, 13, 14, 15, 17, 19]), array([2, 2, 1, 3, 1, 1], dtype=int64))

tile用于重复数组的值

tile(A, reps)

A:表示需要重复的数组

reps:重复的次数

如下,我们把5*2的数组重复了三次,让他变成了 5 * 6的

a1 = np.random.randint(10, 20, (5, 2))
print(np.tile(a1, 3))
--------
[[14 18 14 18 14 18][14 10 14 10 14 10][18 17 18 17 18 17][12 12 12 12 12 12][19 12 19 12 19 12]]

repeat函数也是重复数组的值:

repeat(a, repeats, axis=None)

axis:为0则表示垂直(行数增加),为1表示水平(列数增加)

print(np.repeat(a1, 3, axis=1))
print(np.repeat(a1, 3, axis=0))
----------
[[16 16 16 18 18 18][13 13 13 11 11 11][11 11 11 13 13 13][13 13 13 10 10 10][11 11 11 15 15 15]]
[[16 18][16 18][16 18][13 11][13 11][13 11][11 13][11 13][11 13][13 10][13 10][13 10][11 15][11 15][11 15]]

2.3.3 常用统计函数

基本统计函数:

  • min ,max amax, amin:表示求得最大值和最小值
  • ptp:求最值差(最大值与最小值之差)
  • percentile:求分位数

表示数据波动函数:

  • median:求中位数

  • mean:求算数平均值

  • average:求加权平均值

  • var:方差

  • std:标准方差

数据分布密度函数:

  • histogram
  • bincout

数据相关性函数:判断两个数组是否具有一定的一致性

  • cov:协方差
  • corrcoef:协方差系数

求值函数:

  • sum:求数组所有元素之和
  • cumsum:求数组到某位置的累加和
  • prod:所有元素之积
  • cumprod:数组到某位置的累乘值

相关文章:

Python学习(2)-NumPy矩阵与通用函数

文章首发于:My Blog 欢迎大佬们前来逛逛 1. NumPy矩阵 1.1 mat函数 matasmatrix asmatrix(data, dtypeNone):data:表示输入的数组或者字符串,使用‘,’分割列,使用‘;’分割行 创建两个普通的矩阵&…...

剑指 Offer II 035. 最小时间差

题目链接 剑指 Offer II 035. 最小时间差 mid 题目描述 给定一个 24小时制(小时:分钟 "HH:MM")的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。 示例 1: 输入:timePoints [“23:59”,“0…...

Spark SQL函数定义【博学谷学习记录】

1 如何使用窗口函数窗口函数格式:分析函数 over(partition by xxx order by xxx [asc|desc] [rows between xxx and xxx])学习的相关分析函数有那些? 第一类: row_number() rank() dense_rank() ntile()第二类: 和聚合函数组合使用 sum() avg() max() min() count()第三类: la…...

模拟实现STL容器之vector

文章目录前言1.大体思路2.具体代码实现1.类模板的创建2.构造函数1.无参构造2.拷贝构造 迭代器构造和给定n个val值构造以及析构函数3.空间扩容1.reserve2.resize4.操作符重载1.[ ]重载2.赋值运算符重载5.数据增加和删除1.尾插2.任意位置插入3.任意位置删除4.尾删6.一些其他接口3…...

ChatGPT-4.0 : 未来已来,你来不来

文章目录前言ChatGPT 3.5 介绍ChatGPT 4.0 介绍ChatGPT -4出逃计划!我们应如何看待ChatGPT前言 好久没有更新过技术文章了,这个周末听说了一个非常火的技术ChatGPT 4.0,于是在闲暇之余我也进行了测试,今天这篇文章就给大家介绍一…...

Java反射(详细学习笔记)

Java反射 1. Java反射机制概述 Reflection(反射)是java被视为java动态语言的关键,反射机制允许程序在执行期间借助于Reflection API获取任何类的内部信息,并能直接操作任意对象的内部属性及方法。 Class c Class.forName(&quo…...

学习 Python 之 Pygame 开发魂斗罗(十二)

学习 Python 之 Pygame 开发魂斗罗(十二)继续编写魂斗罗1. 修改玩家扣减生命值2. 解决玩家下蹲子弹不会击中玩家而是直接让玩家死亡的问题3. 完善地图4. 增加产生敌人函数,解决一直产生敌人的问题5. 给玩家类增加计算玩家中心的方法继续编写魂…...

Linux下字符设备驱动开发以及流程介绍

文章目录1 - 字符设备介绍2 - 字符设备开发流程图3 - 字符设备开发流程具体讲解(1)设备编号的定义与申请【1】Linux主次设备号介绍【2】分配设备编号【3】释放主次设备号(2)定义file_operations结构体-初始化接口函数(…...

Web自动化框架断言方法实现

前言1、设计用例方法关键字1.1、获取元素属性值2.1、断言2、代码实现2.1、实现获取元素属性值2.1.1 函数实现2.1.2 方法配置2.1.2 用例调试2.1.3 html属性2.2、实现断言2.2.1 函数2.2.2 方法配置2.2.3 用例调试1)断言结果成功2)断言结果失败前言 本文的…...

8大核心语句,带你深入python

人生苦短 我用python 又来给大家整点好东西啦~ 咱就直接开练噜!内含大量代码配合讲解 python 安装包资料:点击此处跳转文末名片获取 1. for - else 什么?不是 if 和 else 才是原配吗? No,你可能不知道, else 是个…...

【批处理】- 批处理自动安装Mysql与Redis

前言 在全新环境中安装MySQL与Redis操作是挺麻烦的,于是就想使用脚本来自动安装,使用批处理进行一步到位的安装,后面还能使用工具进行打包成exe可执行文件,一键安装,最后能够更好的部署项目到windows系统的服务器。 …...

聊聊华为的工作模式

目录 一、试用期与加班工资 二、招聘 三、月度答辩和转正答辩 四、可信考试认证 五、接口人 六、问题缺陷单 七、代码检视 八、功能开发 九、出征海外 一、试用期与加班工资 一般而言,试用期持续的时间为3-6个月,工资、奖金都按正式员工的标准…...

燕山大学-面向对象程序设计实验-实验6 派生与继承:多重派生-实验报告

CSDN的各位友友们你们好,今天千泽为大家带来的是燕山大学-面向对象程序设计实验-实验5 派生与继承:单重派生-实验报告,接下来让我们一起进入c的神奇小世界吧,相信看完你也能写出自己的 实验报告!本系列文章收录在专栏 燕山大学面向对象设计报告中 ,您可以在专栏中找…...

分割两个字符串得到回文串[抽象--去除具体个性取共性需求]

抽象前言一、分割两个字符串得到回文串二、双指针总结参考文献前言 抽象去个性留共性,是因为具体个性对于解决问题是个累赘。少了累赘,直击需求,才能进行问题转换或者逻辑转换。 一、分割两个字符串得到回文串 二、双指针 // 限定死了&…...

【LeetCode】1609. 奇偶树、1122. 数组的相对排序

作者:小卢 专栏:《Leetcode》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 1609. 奇偶树 1609. 奇偶树 题目描述: 如果一棵二叉树满足下述几个条件&#x…...

【C++初阶】4. Date类的实现

如果下面博客有不理解的地方,可以查看源码:代码提交:日期类的实现 1. 构造函数的实现 由于系统实现的默认构造函数即便采用默认值的形式也只能存在1个固定的默认日期(例如:1997-1-1)。所以,构…...

ES6新特性--变量声明

可以使用let关键字来声明变量let a;let b,c;//同时声明多个变量let stu = 张三;let name =李四,age = 12;//声明变量的同时赋值 let关键字使用的注意事项(1).变量在声明的时候不可以重复,这也符合其他语言的变量声明规范 let name = 李四; let name = 张三;//这里开始报错,但…...

【Django】缓存机制

文章目录缓存的介绍Django的6种缓存方式开发调试缓存dummy.DummyCache内存缓存locmem.LocMemCache文件缓存filebased.FileBasedCache⭐️数据库缓存db.DatabaseCacheMemcache缓存memcached.MemcachedCacheMemcache缓存memcached.PyLibMCCacheDjango缓存的应用内存缓存cache_pag…...

我的创作纪念日——一年的时间可以改变很多

机缘 不知不觉来到CSDN已经创作一年了。打心底讲,对于在CSDN开始坚持创作的原因,我用一句话来概括最合适不过了——“无心插柳柳成荫” 为什么这么说呢? 这要从我的一篇博客说起——《输入命令Javac报错详解》: 那也是我第一次…...

Jetson Nano驱动机器人的左右两路电机

基于Jetson Nano板子搭建一个无人车,少不了减速电机驱动轮子滚动,那如何驱动呢?从Jetson.GPIO库文件来说,里面没有支持产生PWM的引脚,也就意味着Jetson nano没有硬件产生PWM的能力,所以我们不得不使用别的方…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

【HTTP三个基础问题】

面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: ​onCreate()​​ ​调用时机​:Activity 首次创建时调用。​…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...