【北京理工大学-Python 数据分析-1.1】

news2024/11/18 5:30:54

数据维度
维度:一组数据的组织形式

一维数据:由对等关系的有序或无序数据构成,采用线性组织形式。包括列表、集合和数组(python中不常见,但在C++和Java中比较常见)类型。

  • 列表:数据类型可以不同
  • 数组:数据类型相同
    二维数据:由多个一维数据组成,是一维数据的组合形式(表现形式:列表)。
  • 表格
    多维数据:由一维或者二维数据在新维度上扩展形成(表现形式:列表)。
    高维数据:利用最基本的二元关系展示数据间的复杂结构。

NumPy是一个开源的Python科学计算基础库。

  • 一个强大的N维数组对象ndarray。
  • 广播功能函数(是指ndarry在执行某些计算时,如矩阵间的数值计算,对应位置元素1对1执行标量运算,而非线性代数中的矩阵间的运算。可以确保数组间形状不完全相同时可以自动的通过广播机制扩散到相同的形状,进而执行相应的计算功能)。
  • 整合C/C++/Fortran代码的工具。
  • 线性代数、傅里叶变换、随机数生成等功能。
  • NumPy是SciPy、Pandas等数据处理或科学计算库的 基础单元。
  • NumPy的印用(import numpy as np)
    使用Numpy进行科学计算,底层使用的C语言。
    N维数组对象:ndarray
  • 观察:科学计算中,一个维度的所有数据类型往往相同,数组对象采用相同的数据类型,有助于节省运算空间。
    ndarray是一个多维数组对象,由两部分构成:
  • 实际的数据。
  • 描述这些数据的元数据(数据维度、数据类习性等)。
  • nadarray数组一般要求所有元素类型相同(同质),数组下标从0开始(与列表相同)。
  • 使用np.array()生成一个ndarray数组。
  • ndarray在程序中的别名是:array.
  • np。array(0输出成[]形式,元素间用空格分隔。
  • ndarray的两个基本概念:是轴(axis):保存数据的维度;秩(rank):轴的数量,是描述ndarray的基本数据和形式。

ndarray对象的属性

属性说明
.ndim秩,即轴的数量或维度的数量
.shapendarray对象的尺度,对于矩阵,n行m列
.sizendarray对象元素的个数,相当于.shape中的n*m值
.dtypendarray对象的元素类型
.itemsizendarray对象中每个元素的大小,以字节为单位
a=np.array([[0,1,2,3,4],[9,8,7,6,5]])
a.ndim
a.dtype
a.itemsize

ndarray的元素类型

数据类型说明
bool布尔类型,True或False
intc与C语言中的int 类型一致,一那是int32或者int64
intp用于索引的证书,与C语言中的ssize_t一致,int32或者int64
int8字节长度的整数,取值:[-128,127]
int1616维长度的整数,取值:[-64,63]
int3232位长度的整数,取值:[-231 ,231 -1]
int6464位长度的整数,取值:[-263 ,263 -1]
uint88位无符号整数,取值:[0,255]
uint1616位无符号整数,取值:[0,65535]
uint3232位无符号整数,取值[0,232 -1]
uint6464位无符号整数,取值:[0,264 -1]
float1616位半精度浮点数:1位符号位,5位指数,10位尾数
float3232位半精度浮点数:1位符号位,6位指数,23位尾数
float6464位半精度浮点数:1位符号位,11位指数,52位尾数
complex64复数类型,实部和虚部都是32位浮点数
complex128复数类型,实部和虚部都是64位浮点数

numpy为什么有如此多的元素性能和类型?
ndarray的元素类型

  • 对比:Python语法仅支持整数、浮点数和复数3种类型。
  • 科学计算涉及的数据较多,对存储和性能都有较高的要求 ;
  • 对元素类型精细定义,有助于Numpy合理使用存储空间并优化性能。
  • 对元素类型精细定义,有助于程序员对程序规模有合理的评估。
    ndarray数组的创建方法
  • 从Python中的列表、元组等类型创建ndarray数组。
  • 使用NumPy中函数创建ndarray数组,如:arange,ones,zeros等。
  • 从字节流(raw bytes)中创建ndarray数组。
  • 从文件中读取特定格式,创建ndarray数组。

ndarray数组的创建方法:
(1)从Python中的列表、元组等类型创建ndarray数组。

x=np.array(list/tuple)
x=np.array(list/tuple,dtype=np.float32)
x=np.array([0,1,2,3])##从列表类型创建
x=np.array((4,5,6,7))##从元组类型创建
x=np.array([[1,2],[9,8],(0.1,0.2)])##从列表和元组混合类型创建

当np.array()不指定dtype时,NumPy将根据数据情况指定一个dtype类型。

(2)使用Numpy中的函数创建ndarray数组,如:arange,ones,zeros等。

函数说明
np.arange(n)类似range()函数,返回ndarray类型,元素从0到n-1
np.ones(shape)根据shape生成一个全1数组,shape是元组类型
np.zeros(shape)根据shape生成一个全0数组,shape是元组类型
np.full(shape,val)根据shape生成一个数组,每个元素的值都是val
np.eye(n)创建一个正方的n*n单位矩阵,对角线为1,其余为0
np.ones_like(a)根据数组a的形状生成一个全1数组
np.zeros_like(a)根据数组a的形状生成一个全0数组
np.full_like(a,val)根据数组a的形状生成一个数组,每个元素值都是val
np.linspace()根据起止数据等间距地跳虫数据,形成数组
np.concatenate()将2个或多个数组合并成一个新的数组
np.array(10) ##得到一个从0到9的数组
np.ones((3,6))##得到一个所有元素都是1的,3行6列的数组
np.zeros((3,6),dtype=np.int32)##得到一个所有元素都是32位浮点类型数据0的,36列的数组
np.eye(5)##对角线为15阶数组
x=np.ones((2,3,4))##含有最外层两个元素的数组,每个元素有3行(3维)4列
print(x)
x.shape()
a=linspace(1,10,4)##生成的是从1到10之间,以步长为4的等间距数组
b=linspace(1,10,4,endpoint=False)##endpoint表示:终点值10 是否作为结束值
c=np.concatenate((a,b))##采用concatenate将a和b两个数组连接起来

ndarray数组的变换
对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换。

a=np.ones((2,3,4),dtype=np.int32)

ndarray数组的维度变换

方法说明
.reshape(shape)不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape)与.reshape()功能一致,但修改原数组
.swapaxes(ax1,ax2)将数组n个维度中的2个维度进行调换
.flatten()对数组进行降维,返回折叠后的一维数,但原数组不变
a=np.ones((2,3,4),dtype=np.int32)
a.reshape((3,8))##对数组a进行变形,形成一个3维,每个维度8个元素的数组,基本前提是不改变元素的总个数。
a.resize((3,8))##如果是使用resize()的时候,将会改变原来a的形状。
b=a.flatten()##是对a数组进行降维,将得到一个一位数组。

ndarray数组的类型变换

new_a=a.astype(new_type)
a=np.ones((2,3,4),dtype=np.int)
b=a.astype(np.float)

ndarray数组向列表的转换
ls=a.tolist()

a=np.full((2,3,4),25,dtype=np.int32)
b=a.tolist()##将数组a转换成列表b

数组的索引和切片
一维数组的索引和切片:与Python的列表类似

a=np.array([9,8,7,6,5])
a[2]##一维数组a的第三个元素
a[1:4:2]##一维数组的切片:起始编号:终止编号不含:2是步长,切片中的三个元素间采取冒号分隔

多维数组的索引和切片

索引

a=np.arange(24).reshape((2,3,4))
a
a[1,2,3] ##对多维数组进行索引,最外层第一个元素的第二维度的第三个元素
a[0,1,2] ##最外层第0个元素的第一维度的第二个元素(numpy的数据都是从0开始下标)
a[-1,-2,-3] ##采用负数进行索引,最后一层的倒数第二维度的倒数第三个元素

##注意,每个维度的索引值之间用逗号分隔

多维数组的切片

a=np.arange(24).reshape((2,3,4))
a[:,1,-3]##选取一个维度(切片不含第三个元素)
a[:,1:3,:]##每个维度切片,与一维数组相同
a[:,:,::2]##使用冒号,表示覆盖每个维度的全部数据,每个维度可以以步长为2进行跳跃切片

ndarray数据的运算
数组标量之间的运算:作用于数组的每一个元素

a=np.arange(24).reshape((2,3,4))
a.means()##求数组的平均值,是一个标量
a=a/a.means()##用数组的每一个元素除以数组的平均值,获得a与平均值的商。

Numpy的一元函数,对ndarray中的元素执行元素级运算的函数

函数说明
np.abs(x);np.fabs(x)计算数组各元素的绝对值
np.sqrt(x)计算数组各元素的平方根
np.square(x)计算数组个元素的平方
np.log(x);np.log10(x);np.log2(x)计算数组个元素的自然对数、10底对数和2底对数
np.ceil(x);np.floor(x)计算数组各元素的ceiling值或floor值
np.rint(x)计算数组各元素的四舍五入值
np.modf(x)将数组以各元素的小数和整数部分以2各独立数组形式返回
np.cos(x),np.cosh(x);np.sin(x),sinh(x);np.tan(x)计算数组各元素的普通型和双曲型三角函数
np.exp(x)计算数组各元素的指数
npsign(x)计算数组各元素的符号值,1(+),0,-1(-)
a=np.arange(24).reshape((2,3,4))
np.square(a)##不改变原来a的元素值,如果需要计算后的新值,需要对计算后的值进行赋值。
a=np.sqrt(a)
np.modf(a)

NumPy二元函数

函数说明
+;-:*;/: **两个宿主各元素进行对应运算
np.maximum(x,y);np.fmax();np.minimum(x,y);np.fmin()元素级的最大值最小值计算
np.mod(x,y)元素级的模运算
np.copysign(x,y)将数组y中的各元素值的符号复制给素组x对应元素
>;<;>=;<=;==;!=算术比较,产生布尔型数组

在这里插入图片描述

小结回顾:

NumPy库入门

  • 数据的维度:一维、二维、多维、高维
  • ndarray类型属性、创建和变换
  • 数组的索引和切片
  • 数组的运算:一元函数、二元函数
    属性
    .ndim
    .shape
    .size
    .dtype
    .itemsize

创建和变换
np.arange(n)
np.ones(shape)
np.zeros(shape)
np.full(shape,val)
np.eye(n)
np.ones_like(a)
np.zeros_like(a)
np.full_like(a,val)
.reshape(shape)
.resize(shape)
.swapaxes(ax1,ax2)
.flatten(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/133585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

讲座笔记:Representation Learning on Networks

1 传统机器学习 传统机器学习需要进行很多的特征工程 我们希望模型自动学习特征&#xff0c;而不是用人为特征工程的方式1.1 目标 1.2 难点 graph更复杂&#xff0c;CNN和RNN很难直接应用 ——>复杂的拓扑结构&#xff08;不像CNN有网格的概念&#xff09;——>没有固定…

国家队入场,中国数字资产交易市场或将迎来新一轮“洗牌”

‍‍数据智能产业创新服务媒体——聚焦数智 改变商业数字化已经成为中国文化产业的催化剂&#xff0c;一大批文化资源在数字技术的赋能下焕发了崭新的生机。随着数字化的升级与科技进步&#xff0c;数字经济正在成为改变全球竞争格局的关键力量&#xff0c;各国家都争先出台相…

【微服务】Nacos 健康检查机制

目录 一、前言 二、注册中心的健康检查机制 三、Nacos 健康检查机制 四、临时实例健康检查机制 五、永久实例健康检查机制 六、集群模式下的健康检查机制 七、小结 &#x1f496;微服务实战 &#x1f496; Spring家族及微服务系列文章 一、前言 在前文中&#xff0c;…

使用 Helm 安装 MQTT 服务器-EMQX

EMQX ℹ️ Info: 使用 EMQX 通过 Helm3 在 Kubernetes 上部署 EMQX 4.0 集群 | EMQ emqx/deploy/charts/emqx at main-v4.4 emqx/emqx (github.com) emqx/values.yaml at main-v4.4 emqx/emqx (github.com) emqx/emqx-operator: A Kubernetes Operator for EMQ X Broker (git…

Arch Linux/Manjaro安装pycharm

首先换清华源以加快速度 &#xff08;已经换源的小伙伴可以跳过这一步&#xff09; 首先安装vim&#xff0c;用来编辑文件&#xff0c;已经安装过的可以跳过这一步。 sudo pacman -S vim 然后使用vim编辑配置文件 sudo vim /etc/pacman.d/mirrorlist 打开文件以后按inser…

Javaweb——第二章 Jsp和Servlet

目录 2.1 JSP概述 2.2 Servlet概述 2.3 jsp和servlet的区别和联系&#xff1a; ​编辑 2.4 Jsp的生命周期 2.4.1 JSP编译 2.4.2 JSP初始化 2.4.3 JSP执行 2.4.4 JSP清理 2.5 Servlet 2.5.1 Servlet的工作模式 2.5.2 Servlet创建方式 2.5.3 Servlet生命周期 2.1 JS…

JAVA之网络编程学习

文章目录一 java网络编程初识1.1 概述1.2 C/S 架构&B/S架构认识1.2.1 C/S架构1.2.2 B/S架构1.3 网络通信两个要素1.4 IP(Inet Adderss)1.5 InetAddress演示1.6 端口号1.7 InetSocketAddress使用1.8 网络通信协议二 TCP网络编程2.1 信息通信案例2.1.1 TcpClientDemo2.1.2 Tc…

聊聊接口文档的事儿

1、前言 大家好&#xff0c;欢迎来到我的吉鹿&#xff08;记录&#xff09;空间。 最近在做一个前后端分离的项目时&#xff0c;由于后端提供的 API 接口文档实在是一言难尽&#xff0c;导致了开发的效率大大降低。于是我出手了&#xff0c;我决定薅完我20几年的头发来肝一下…

TC275——10GPT12_PWM_Generation

产生PWM的方式有很多&#xff0c;这里尝试使用TC275的GPT12模块&#xff0c;来产生具有固定频率和可变占空比的PWM信号。 GPT12就是General Purpose Timer Unit通用定时器模块&#xff0c;它包含5个16位定时器&#xff0c;被分给GPT1和GPT2。 这里使用GPT1&#xff08;T2、T3…

LinuxQQ3.0体验和下载方式

体验 2022年12月31日推出了LinuxQQ3.0版本&#xff0c;2.0版本特别复古 3.0特别丝滑 支持QQ空间 管理界面与WindowsQQ一致 支持截图和表情&#xff0c;传输文件图片很方便 下载方式 下载链接 im.qq.com/linuxqq/index.shtml 选择合适的版本下载即可 从下载文件夹中可以找到…

.Net 6实现旋转验证码

前几篇文章&#xff0c;介绍了.Net 6实现的滑动验证码功能&#xff0c;最近把滑动验证码的ImageSharp替换成了SkiaSharp&#xff0c;其中抠图部分参考了pojianbing大神的代码。滑动验证码完成之后&#xff0c;心想着。做一个旋转验证码。其实旋转验证码跟滑动验证码及其类似。 …

跨系统实时同步数据解决方案

数据量太大&#xff0c;单存储节点存不下&#xff0c;就只能把数据分片存储。 数据分片后&#xff0c;对数据的查询就没那么自由。如订单表按用户ID作为Sharding Key&#xff0c;就只能按用户维度查询。我是商家&#xff0c;我想查我店铺的订单&#xff0c;做不到。&#xff0…

ubuntu18.04下mysql数据库C语言API操作总结

通过C/C去操作数据库需要调用mysql客户端api&#xff0c;常用api和调用举例见后面。 目录 一.常用api 1.环境初始化 2.连接 mysql 的服务器 3.增删改查操作 4.事务处理 5.处理查询数据集合 6.释放资源&#xff0c;关闭连接 7.字符集相关 8.获取错误信息 二.api调用举…

Linux杂谈之sudo

一 sudo配置文件/etc/sudoers介绍 ① 什么是sudo 1) sudo 的英文全称是 super user do&#xff0c;即以超级用户root 用户的方式执行命令2) /etc/sudoers 是一个文本文件,只有root用户有该命令的执行权限 1) 允许普通用户以特权用户的权限去执行某些特权命令,访问和使用本…

优秀国土空间规划设计网络评选投票投票怎么进行小程序免费使用

如果通过一个小程序免费制作一个微信投票活动呢&#xff1f;文章详细讲解如何利用一款免费好用的微信小程序“活动星投票”小程序来制作投票活动&#xff0c;无需注册即可免费制作&#xff0c;非常的方便快捷&#xff0c;可以实现视频投票、分组投票、隐藏选手票数、导出投票数…

【Linux】进程概念(下)

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;进程状态&…

手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤 + 源码)

导 读 本文将手把手教你用Python和OpenCV搭建一个半自动标注工具&#xff08;包含详细步骤 源码&#xff09;。 背景介绍 样本标注是深度学习项目中最关键的部分&#xff0c;甚至在模型学习效果上起决定性作用。但是&#xff0c;标注工作往往非常繁琐且耗时。一种解决方案是…

【苹果家庭群发推】创作AppleScript脚本来控制MacOS附有的iMessage客户端停止考据,近似于组iMessage

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

ENVI_IDL:如何对文件名的日期进行格式化输出?

目录 00 前言 01 第一步&#xff0c;使用file_basename()函数路径中的获取文件名 02 第二步&#xff0c;使用strmid()函数获取文件名的日期 03 第三步&#xff0c;将获取的日期进行类型转换 04 第四步&#xff0c;将日期进行整理 05 第五步&#xff0c;进行格式化输出 …

BiSeNetv2:语义分割经典方法BiSeNet的升级版本

分享IJCV2021上发表的一篇文章BiSeNetv2&#xff0c;这是BiSeNet的升级版本。开源代码地址&#xff1a;https://github.com/open-mmlab/mmsegmentation/tree/master/configs/bisenetv2 1.动机 语义分割是指为每个像素分配一个标签&#xff0c;它广泛用于场景理解、自动驾驶、人…