百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

Python数据分析(三)Numpy数值计算基础

ztj100 2025-02-19 14:44 8 浏览 0 评论

Numpy(numeric python),是 python 的一个开源数值计算库,主要用于

数组和矩阵计算。底层是 c 语言实现,运行效率远高于纯 python 代码。在

python 数据科学领域,numpy 是使用最广泛的工具包之一。

?Numpy 提供了两种基本的对象:ndarray(N-dimensional Array Object) ufunc

(Universal Function Object)

? ndarray 是存储单一数据类型的多维数组,包含 array 及其子类 matrix

? ufunc 则是能够对数组的每一个元素进行处理的函数

?安装:pip install numpy


创建数组对象

Numpy 提供的 array 函数可以创建一维或多维数组,基本使用语法如下:

np.array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0)


相关属性


我们也可以通过内置函数来创建数组:

一维

?np.arange(start,end,step)

等差数列,固定步长

?np.linspace(start,end,num=50)

等差数列,固定个数

?np.logspace(start,end,num=50,base=10) 等比数列

?np.diag(array,k=0)

抽取对角线

多维

?np.zeros(shape)

#用零填

?np.zeros_like(a)

#复制a的shape,用零填

?np.ones(shape)

#用1填

?np.ones_like(a)

#复制a的shape,用1填

?np.full(shape, fill_value) #用指定值填

?np.identity(n)

#n行的单位矩阵(对角线为1)

?np.eye(N, M=None, k=0) #类似上面,但可以指定列,k值对对角线平移

我们还可以使用 random 模块创建数组

?np.random.random()

:无约束条件下生成随机数组

?np.random.rand()

:生成服从均匀分布的随机数组

?np.random.randn()

:生成服从正态分布的随机数组

?np.random.randint(low, high=None, size=None)

:生成指定区间的随机数组

random 模块其他常用函数:

数组数据类型

在 numpy 中,所有数组的数据类型是同质的,即数组中的所有元素类型必须是一

致的。这样做的好处是,更容易确定该数组所需要的存储空间。下面是 numpy 的

基本数据类型及其取值范围


我们知道 python 中 空值记为 None,而在 numpy 中的空值表示为: np.nan ,它是一个特殊的float。

我们也可以自定义数据类型

?创建一个存储餐饮企业库存信息的数据类型。其中,用一个长度为40个字符的字符串来记录商

品的名称,用一个64位的整数来记录商品的库存数量,最后用一个64位的单精度浮点数来记

录商品的价格,具体步骤如下。

数组的访问

? 通过索引访问

?访问数组的方式 a[m][n]

?访问矩阵的方式 a[m,n]

?通过整数数组

a[[1,3,4]]

?通过布尔数组

a[[True,Flase,True]]

? 通过切片访问

?一维数组切片同 python 序列切片一致,a[start:stop:step]

?多维数组切片,每个维度以逗号隔开,a[start:stop:step, start:stop:step]

或者 a[:][:]

数组变形

? reshape

?a.reshape(),返回一个新的数组,原数组 a 不受影响

? resize

?a.resize(),返回 None,修改的是原数组 a

数组扁平化

? ravel

?a. ravel(),将多维压缩为一维,返回原数组的引用,对新结果修改,a会受影响

? flatten

?a. flatten(),将多维压缩为一维,返回原数组的拷贝,对新结果修改,a不会受影响

二者均可以指定 order 的值为“

F”从列的方向上压扁

数组组合

? hstack

?np.hstack((arr1,arr2))

数组横向组合

?np.c_[arr1,arr2]

? vstack

?np.vstack((arr1,arr2))

数组纵向组合

?np.r_[arr1,arr2]

? concatenate

?np. concatenate((arr1,arr2),axis=1)

数组横向组合

?np. concatenate((arr1,arr2),axis=0)

数组纵向组合

数组分割

? hsplit

?np.hsplit(arr,2)

数组横向分割

? vsplit

?np.vsplit(arr,2)

数组横向分割

? split

?np. split(arr,2,axis=0)

数组纵向分割

?np. split(arr,2,axis=1)

数组横向分割

创建 numpy 矩阵

在NumPy中,矩阵是ndarray的子类,是继承自NumPy数组对象的二维数组对象。与数

学概念中的矩阵一样,NumPy中的矩阵也是二维的。

? 使用mat函数创建矩阵: matr1 = np.mat("1 2 3;4 5 6;7 8 9")

? 使用matrix函数创建矩阵:matr2 = np.matrix([[1,2,3],[4,5,6],[7,8,9]])

区别:使用mat函数创建矩阵时,若输入matrix或ndarray对象,则不会为它们创建副本

很多时候会根据小的矩阵创建大的矩阵:

? 使用bmat函数合成矩阵:np.bmat("arr1 arr2; arr1 arr2"

矩阵的运算

在NumPy中,矩阵计算是针对整个矩阵中的每个元素进行的:

? 矩阵与数相乘:matr1*3

? 矩阵相加减:matr1±matr2

? 矩阵相乘:matr1*matr2

? 矩阵对应元素相乘:np.multiply(matr1,matr2)

? 矩阵特有属性:

矩阵的运算(此处以矩阵乘法和转置为例)

? numpy.linalg 中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的

函数(了解)

通用函数

? ufunc(universal function),全称通用函数,是一种能够对数组中所有

元素进行操作的函数

?四则运算:加(+)、减(-)、乘(*)、除(/)、幂(**)。数组间的四则运算表示

对每个数组中的元素分别进行四则运算,所以形状必须相同。

?比较运算:>、<、==、>=、<=、!=。比较运算返回的结果是一个布尔数组,每个

元素为每个数组对应元素的比较结果。

?逻辑运算:np.any函数表示逻辑“or”,np.all函数表示逻辑“and”。运算结果返回

布尔值。

? 四则运算

? 标量运算,会作用到整个数组上

? 比较运算

广播机制

广播(Broadcasting)是指不同形状的数组之间执行算术运算的方式。当使

用ufunc函数进行数组计算时,ufunc函数会对两个数组的对应元素进行计算。

进行这种计算的前提是两个数组的shape一致。若两个数组的shape不一致,

则NumPy会实行广播机制。

?广播的条件:待扩展的轴的长度为 1 时

?维度扩张和维数扩张:向最大值靠拢

读写文件

读写二进制数据

? save 函数是以二进制的格式保存数据。

np.save("../tmp/save_arr",arr)

? savez 函数可以将多个数组保存到一个文件中。

np.savez('../tmp/savez_arr',arr1,arr2)

? load 函数是从二进制的文件中读取数据。

np.load("../tmp/save_arr.npy")

注意:存储时可以省略扩展名,但读取时不能省略扩展名。

读写文本文件

? savetxt 函数是将数组写到某种分隔符隔开的文本文件中。

np.savetxt("../tmp/arr.txt", arr, fmt="%d", delimiter=",")

? loadtxt 函数执行的是把文件加载到一个二维数组中。

np.loadtxt("../tmp/arr.txt",delimiter=",")

? genfromtxt 函数面向的是结构化数组和缺失数据。

np.genfromtxt("../tmp/arr.txt", delimiter = ",")

排序

? 直接排序

np.sort(arr, axis=-1, kind=None, order=None)

?axis 可指定排序的方向,0 纵向,1 横向

?kind 可指定排序的算法,默认快排

也可使用 arr.sort() 来排序

? 间接排序

np.argsort(arr, axis=-1, kind=None, order=None) 或 arr.argsort()

? 返回值为重新排序值的下标

np.lexsort(keys, axis=-1) ,用法: np.lexsort((a,b,c))

? 按最后传入的数组排序

去重与重复

? 去重

? np.unique(arr

? 重复

?np.tile(arr,arr)

?arr.repeat(3,axis=1)

tile 和 repeat 区别:tile 是对数组进行重复操作,repeat 是对数组中的每个元素进行

重复操作前者是函数,后者是方法。

常用统计函数

当 axis=0 时,表示沿着纵轴计算。当 axis=1时,表示沿着横轴计算。默认计算一个总值。

常用统计函数

? 案例:随机漫步


在学习完以上内容后还要多加练习!

相关推荐

告别手动操作:一键多工作表合并的实用方法

通常情况下,我们需要将同一工作簿内不同工作表中的数据进行合并处理。如何快速有效地完成这些数据的整合呢?这主要取决于需要合并的源数据的结构。...

【MySQL技术专题】「优化技术系列」常用SQL的优化方案和技术思路

概述前面我们介绍了MySQL中怎么样通过索引来优化查询。日常开发中,除了使用查询外,我们还会使用一些其他的常用SQL,比如INSERT、GROUPBY等。对于这些SQL语句,我们该怎么样进行优化呢...

9.7寸视网膜屏原道M9i双系统安装教程

泡泡网平板电脑频道4月17日原道M9i采用Win8安卓双系统,对于喜欢折腾的朋友来说,刷机成了一件难事,那么原道M9i如何刷机呢?下面通过详细地图文,介绍原道M9i的刷机操作过程,在刷机的过程中,要...

如何做好分布式任务调度——Scheduler 的一些探索

作者:张宇轩,章逸,曾丹初识Scheduler找准定位:分布式任务调度平台...

mysqldump备份操作大全及相关参数详解

mysqldump简介mysqldump是用于转储MySQL数据库的实用程序,通常我们用来迁移和备份数据库;它自带的功能参数非常多,文中列举出几乎所有常用的导出操作方法,在文章末尾将所有的参数详细说明...

大厂面试冲刺,Java“实战”问题三连,你碰到了哪个?

推荐学习...

亿级分库分表,如何丝滑扩容、如何双写灰度

以下是基于亿级分库分表丝滑扩容与双写灰度设计方案,结合架构图与核心流程说明:一、总体设计目标...

MYSQL表设计规范(mysql表设计原则)

日常工作总结,不是通用规范一、表设计库名、表名、字段名必须使用小写字母,“_”分割。...

怎么解决MySQL中的Duplicate entry错误?

在使用MySQL数据库时,我们经常会遇到Duplicateentry错误,这是由于插入或更新数据时出现了重复的唯一键值。这种错误可能会导致数据的不一致性和完整性问题。为了解决这个问题,我们可以采取以...

高并发下如何防重?(高并发如何防止重复)

前言最近测试给我提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。...

性能压测数据告诉你MySQL和MariaDB该怎么选

1.压测环境为了尽可能的客观公正,本次选择同一物理机上的两台虚拟机,一台用作数据库服务器,一台用作运行压测工具mysqlslap,操作系统均为UbuntuServer22.04LTS。...

屠龙之技 --sql注入 不值得浪费超过十天 实战中sqlmap--lv 3通杀全国

MySQL小结发表于2020-09-21分类于知识整理阅读次数:本文字数:67k阅读时长≈1:01...

破防了,谁懂啊家人们:记一次 mysql 问题排查

作者:温粥一、前言谁懂啊家人们,作为一名java开发,原来以为mysql这东西,写写CRUD,不是有手就行吗;你说DDL啊,不就是设计个表结构,搞几个索引吗。...

SpringBoot系列Mybatis之批量插入的几种姿势

...

MySQL 之 Performance Schema(mysql安装及配置超详细教程)

MySQL之PerformanceSchema介绍PerformanceSchema提供了在数据库运行时实时检查MySQL服务器的内部执行情况的方法,通过监视MySQL服务器的事件来实现监视内...

取消回复欢迎 发表评论: