python数据分析——NumPy基础

news2024/11/26 21:46:19

目录

一、创建数组的方法

二、array的属性

三、创建特殊的数组

四、数组的变换

4.1、数组重塑

4.2、数组合并

4.3、数组分割

4.4、数组转置和轴对换

五、数组的索引和切片

5.1、一维数组的索引

5.2、多维数组的索引

5.3、多维数组的访问

六、数组的运算

6.1、数组的四则运算

6.2、ufunc 函数

七、数组读写

7.1、读写二进制文件

7.2、读写文本文件

7.3、读写csv文件

八、NumPy中的数据统计与分析

8.1、排序

8.2、重复数据与去重

8.3、常用统计函数

九、delete 函数


学习笔记:NumPy 基础知识

一、创建数组的方法

常见如以下:

  • np.array([1,2,3])

  • np.array(arange(1,4))

  • np.arange(1,4) 常用

 array: 将输入的数据(可以是列表、元组、数组及其他序列) 转换为 ndarray (Numpy数组)
 arange : Python内建函数 range 的数组版

例子:

import numpy as np
a = np.array([1,2,3,4])
b = np.array(range(1,5))
c = np.arange(1,5,dtype="float32")  # 常用
d = np.arange(0,1,0.01)
print(a)
print(b) 
print(c)
 
print(type(a),type(b),type(c))

 结果:

二、array的属性

  • shape : 数组的维度, 通俗的讲就是n行m列,则返回(n,m)的一个tuple,对于shape有 len(shape) = ndim。
  • ndim:  数组的轴(维数)的个数,python里面,维度的数量称之为秩(区别于线性代数里面的)
  • size:  返回一个数字,表示array中所有数据元素的数目
  • dtype: 返回 array 中元素的数据类型

例子:

a = np.array(range(1,5),dtype='int64')

print(a.shape)
print(len(a.shape))
print(a.ndim)
print(a.size)
print(a.dtype)

结果:

三、创建特殊的数组

  •  np.ones():  元素全为 1
  •  np.zeros():  元素全为 0
  •  np.full():   传入指定的元素
  •  np.diag():  创建对角矩阵
  •  np.linspace():  等差
  •  np.logspace():   等比

例子:

a = np.ones((2,3))
b = np.zeros((2,3))
c = np.full(3,520)       
d = np.full((1,3),520)  
e = np.diag((1,2,3,4,5))  

f = np.linspace(0,1,5)  # 等差
j = np.logspace(0,0,10) # 等比  开始点和结束点是10的幂,0代表10的0次方,9代表10的9次方。
h = np.logspace(0,1,5)  # 底数默认为 10 

print('元素全为1:\n',a)
print('元素全为0:\n',b)
print('传入指定的元素:\n',c)
print('传入指定的元素:\n',d)
print('对角矩阵:\n',e)

print(f)
print(j)
print(h)

结果:

四、数组的变换

4.1、数组重塑

对于定义好的数组,可以通过 reshape() 方法改变其数组的维度,传入的参数为新维度的元组。

需要注意的是:数据重塑不会改变原来的数组。对于 reshape() 中的参数设置为 -1 ,表示数组的维度可通过数据本身来推断。

例子:

a = np.arange(8)  # 等差数组 
b = a.reshape((2,4)) # 2 行4列  reshape 未改原数组  应满足: 2 x 4 = 8
c = a.reshape(4,-1)  

print(a)
print(b)
print(a) 
print('========')
print(c)

结果:

与 reshape() 方法相反的是

  • 数据扁平化 flatten
  • 数据散开 ravel 

两者的

共同点:都是将 多维 数组降维为 一维

不同点:flatten 是返回一份拷贝,对拷贝所做的修改不会影响 原始数组的值;ravel 是返回视图,对返回的修改,会影响 原始数组。

例子:

# 与reshape() 方法相反的是 数据散开 ravel 或数据扁平化 flatten
a = np.array([
    [1,2,3],
    [4,5,6],
])
b = a.flatten()
c = a.ravel()
 
print(b)
b[1] = 2222
print(a)
print('============')
print(c)
c[1] = 666
print(a)

结果:

4.2、数组合并

数组合并用于多个数组键的操作,NumPy 使用 hstack、vstack 和 concatenate 函数完成数组的合并。

  • hstack: 横向合并
  • vstack: 纵向合并
  • concatenate:指定方向合并 axis = 1 横向  , 0 纵向

例子:

arr1 = np.arange(6).reshape(3,-1)
arr2 = arr1 * 2

print(arr1)
print('======')
print(arr2)

print('===合并====')
a = np.hstack((arr1,arr2))
print('横向合并 hstack: \n',a)

b = np.vstack((arr1,arr2))
print('纵向合并 cvstack: \n',b)

c = np.concatenate((arr1,arr2),axis = 1) # axis = 1 横向  
print(c)

结果:

4.3、数组分割

与数组合并向反,NumPy 提供了 hsplit、vsplit 和 split 分别实现数组的横向、纵向和指定方向的分割。

  • hsplit 横向分割
  • vsplit 纵向分割
  • split 指定方向分割 axis = 1 横向 , 0 纵向

例子:

arr1 = np.arange(16).reshape(4,4)

print(arr1)
print('=======================')
a = np.hsplit(arr1,2)    # 要求等分  能够被除尽
print(a)
print(a[0])
print('=======================')
b = np.vsplit(arr1,2)
print(b)
print(b[0])
print('=======================')
c = np.split(arr1,indices_or_sections=2,axis=1)
print(c)

结果:

4.4、数组转置和轴对换

 数组转置是数组重塑的一种特殊形式,可以通过 transpose 方法进行装置。transpose 方法需要传入轴编号组成的元组。

需要注意的是:无论是数组的转置还是轴对换,返回的都是源数据的视图,对返回的数组操作都会改变原数组

  • 数组的转置    ==>  将矩阵的 变成 列
    • 数组的 transpose(1,0)
    • 数组的 T 属性

例子:下面是针对二维的转置,还有三维的,遇到再记录。

# 数组的转置 
arr = np.arange(6).reshape(3,2)
print('矩阵:\n',arr)      
z_arr = arr.transpose((1,0)) 
#  transpose(X,Y)X轴用0表示,Y轴用1表示  对应:行,列 
# (1,0) 表示行与列调换了位置;因为 1 是行 0 是列  
print('转置矩阵:\n',z_arr)  # 转置矩阵: 将矩阵的行列互换得到的新矩阵称为转置矩阵
print(arr.T)

结果:

  • 数组的轴对换    ==>  将矩阵的 变成 行
    • 数组的 swapaxex

例子:

# 数组的轴对换 
arr = np.arange(6).reshape(3,2)

print(arr)
print('==========')
a = arr.swapaxes(0,1)
# 对返回的数组进行操作
a[0] = [1,2,3]

print(a)
print('原数组变成了:\n',arr)

结果:

五、数组的索引和切片

5.1、一维数组的索引

一维数组的索类似于Python 中的列表。

需要注意的是:数组的切片返回的是视图,如对返回的数组进行操作,会改变原数组

这就有了数组元素的复制:切片数组.copy()

例子:

arr = np.arange(10)

print(arr)

print(arr[0])
print(arr[-1])
print(arr[0:3])

# 数组元素的复制
arr1 = arr[2:-1].copy()
print('复制出来的元素:',arr1)

结果:

5.2、多维数组的索引

多于多维数组,它的每一个维度都有一个索引,各个维度的索引之间用逗号分隔。

  • 多维数组的索引
arr = np.arange(12).reshape(3,-1)

print(arr)
print('=============')

print(arr[0,1:3]) # 第 0 行中 第 1 列到第 2 列的元素
print(arr[:,2])   # 第 2 列元素

print(arr[:1,:1]) # 第 0 行 第0 列元素
print(arr[-1:,:]) # 最后一行元素

结果:

5.3、多维数组的访问

例子:

arr = np.arange(12).reshape(3,4)

print(arr)
print('=============')

print(arr[0][0])
print(arr[(0,1),(1,3)])

结果:

六、数组的运算

数组不需要通过循环就可以完成批量计算。

例子:计算数组 a 与数组 b 相加,数组 a是 1 ~ n 数字的立方,数组 b 是1 ~ n 的数字平方

# 数组 a 与数组 b 相加,数组 a是 1 ~ n 数字的立方,数组 b 是1 ~ n 的数字平方
import numpy as np

def sum(n):
    a = np.arange(1,n+1)**3
    b = np.arange(1,n+1)**2
    return a+b 
print(sum(3))

结果:

6.1、数组的四则运算

例子:

x = np.array([2,4,6])
y = np.array([1,2,3])

print(x + y)
print(x - y)
print(x * y)
print(x ** y)
print(x / y)

结果:

 在上面的例子中,可以看出:数组间的四则运算是对每个数组中的元素分别进行四则运算,这就要求了计算的数组的形状必须相同。不同形状之间的数组运算就会报错,对于此,我们可以使用 ufunc 函数。

6.2、ufunc 函数

ufunc 函数全称为通用函数,是一种能够对数组中的所有元素进行操作的函数。ufunc 函数的广播机制是指不同形状的数组之间执行算术运算的方式。

广播机制需要遵循4个原则:

  • 让所有输入数组都向其中 shape 最长的数组看齐,shape 中不足的部分都通过在前面加 1 补齐。
  • 输出数组的 shape 是输入数组 shape 的各个轴上的最大值。
  • 如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错。
  • 当输入数组的某个轴的长度为 1 时,沿着此轴运算时都用此轴上的第一组值。

读完上面的4个原则,感觉很难理解的话,我们来看下面的例子就会好很多:

例子:

arr1 = np.array([
    [0,0,0],
    [1,1,1],
    [2,2,2],
])
arr2 = np.array([1,2,3])
arr3 = np.array([[1],[2],[2]])

print(arr1)
print('=========')
print(arr2)
print('=========')
print(arr3)
print('=========')

print('广播 X轴长度为1 向下沿用\n',arr1 + arr2)
print('--------------')
print('广播 y轴长度为1 向右沿用\n',arr1 + arr3)

结果:

 更详细的可以看看这位博主的:很不错

ufunc函数常用运算、ufunc函数广播机制——《Python数据分析与应用》笔记_Linesoso的博客-CSDN博客

七、数组读写

7.1、读写二进制文件

  • 读 
    • load() 
    • save('文件名.npy',arr)

    • savez('文件名.npz',arr)   多个数组的保存

例子:

a = np.arange(1,13).reshape(3,4)
np.save('arr.npy',a)
c = np.load('arr.npy')
c

结果:

 上面是直接保存和读取当前文件下的。我们也可以自定义路径

np.save(r'D:\桌面\arr.npy',a)

7.2、读写文本文件

  • loadtxt()
  • savetxt()
  • genfromtxt()   参数 delimiter 数据以什么分隔

7.3、读写csv文件

  • loadtxt(‘CSV文件名’)

八、NumPy中的数据统计与分析

8.1、排序

  • 直接排序
    • sort()
    • axis = 1 表示 行 ,   0 表示 列 
    • 一维中 不存在axis=1,只有axis=0
  • 间接排序
    • argsort
    • lexsort

直接排序:

例子:对于一维数组排序,不管axis即可。

arr = np.array([7,8,9,1,2,3,4,4,4,5,6])

new = np.sort(arr,axis=0)  # 是一维数据,只有一个维度,也就是axis=0,不存在axis=1
print(new)

结果:

 二维数组:

arr = np.array([
    [4,3,2],
    [5,2,1],
    [1,7,2]
])

x = np.sort(arr,axis=1) # 行向排序  小到大
y = np.sort(arr,axis=0) # 列向排序   
print('行向排序:\n',x)
print('列向排序:\n',y)

结果:

 间接排序:

对于 argsort:

返回的值为排序后的下标数组。

例子:

arr = np.array([5,4,3,2,1])

print('原数组:\n',arr)
print('========')
b = np.argsort(arr)
print('排序后:\n',b)

结果:

 对于上面的代码我们不难看出:先将 arr  中的元素从小到大排序 然后依次提取原数组的每个元素在新素组的下标位置,最后输出提取出来的下标组成一个索引数组。

8.2、重复数据与去重

  • np.unique(去重数组)
  • np.title(A,resp)            ===>   A 表示要重复的数组,resps表示重复次数
  • np.repeat(a,resp,axis=0)    ===>    axis=0 按行重复

8.3、常用统计函数

  • np.sum(arr)    axis=1 行求和 ,0 列求和。none 所有元素求和。
  • np.mean()  # 均值
  • np.var()      # 方差
  • np.std()      # 标准差
  • np.median()    # 中位数  中值

print(x.sum(axis=0))  # 求和,axis:0是列求和,1是行求和,None是所有数求和
print(np.mean(x, axis=0))  # 求平均数
print(np.median(x, axis=0))  # 求中值
print(x.max(axis=0))  # 求最大值
print(x.min(axis=0))  # 求最小值
print(np.ptp(x, axis=0))  # 求极值(最大最小值的差)
print(x.std(axis=0))  # 求标准差

九、delete 函数

np.delete(arr , [-1,-2], 0) # [-1,-2]  axis =  0, 按删除  删除第 -1 行 第 -2 行

np.delete(arr , 2, 0) # [-1,-2]  axis =  0, 按删除   

Numpy还有很多很多实用的知识点,后面遇到再记录。

今天就到这里啦~~~

拜~~~

 

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

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

相关文章

Apollo 应用与源码分析:guardian 紧急处置

目录 概念 代码 分析 概念 Guardian模块的主要作用是监控自动驾驶系统状态,当出现模块为失败状态的时候,会主动切断控制命令输出,并且刹车。 有点像是保险丝,有一个fallback机制。 guardian模块的触发条件主要有2个。 上报…

虚拟机的快照与克隆

简单回顾以下快照 快照的拍摄: 记录虚拟机当前的状态 拍摄快照时,系统一定要处于关机状态 转到: 回到某一个历史快照节点 克隆 复制某一个历史快的的节点 克隆的方式 链接克隆: 当前节点文件家只存储差异性数据 相同数据放在原…

RabbitMQ之延迟队列

延迟消息是指的消息发送出去后并不想立即就被消费,而是需要等(指定的)一段时间后才触发消费。 例如下面的业务场景:在支付宝上面买电影票,锁定了一个座位后系统默认会帮你保留15分钟时间,如果15分钟后还没付…

zcu106 lwip搭建以太网配置寄存器

文章目录实验一1.配置网口GEM32.导出xsa文件,在vitis中创建工程,选择freertos10_xilinx的操作系统来使用3.配置lwip211,选择SOCKET API的模式4.创建工程 选择FreeRTOS Iwip TCP Perf Server模板5.代码分析main.cfreertos_tcp_perf_server.cfr…

基于yolov5n的轻量级MSTAR遥感影像目标检测系统设计开发实战

做过很多目标检测类的项目了,最近看到一个很早之前用过的数据集MSTAR,之前老师给的任务是基于这个数据集来搭建图像识别模型,殊不知他也是可以用来做目标检测的,今天正好有点时间就想着基于这个数据集来做一下目标检测实践。 首先…

利用车载摄像头了解道路语义的鸟瞰图

以下内容来自从零开始机器人SLAM知识星球 每日更新内容 点击领取学习资料 → 机器人SLAM学习资料大礼包 #论文##开源代码# Understanding Bird’s-Eye View of Road Semantics using an Onboard Camera 论文地址:https://arxiv.org/abs/2012.03040 作者单位&#…

自助建站工具

每用一次自助建站工具,就有一个程序员失业。 作为企业老板的你,要为公司的获客,企业推广发愁,但是预算有限,招人也很困难,不仅要面试程序员,后续还要检验这个程序员的功力,实在是太…

CentOS升级python3版本

介绍 本文将详细介绍在CentOS7.9系统的服务器将自带的python3.6.8版本升级到3.8.0版本的过程。 在升级前CentOS7.9中已经同时存在两个python版本分别是2.7.5和3.6.8。 查看CentOS版本命令: cat /etc/centos-release这是我升级后的python版本(python3升…

Minio设置文件永久访问和下载

1. docker pull minio/mc 2. docker run -it --entrypoint/bin/sh minio/mc 3. mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> [--api API-SIGNATURE] mc ls minio ALIAS: 别名就是给你的云存储服务起了一个…

2021-02-01

oracle设置定期修改密码 --通过如下sql查询用户密码有效期配置 SELECT username,PROFILE FROM dba_users; --上述sql查询结果一般为default --使用如下sql可以查询到default的默认值 select * from dba_profiles where profile DEFAULT and resource_name PASSWORD_LI…

HTML+CSS大作业【传统文化艺术耍牙15页】学生个人网页设计作品

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

MES系统中生产计划模块的重要作用

MES系统中的“生产调度”支持从“工单管理”中收到的作业队列&#xff0c;根据生产目标&#xff08;时间和数量&#xff09;&#xff0c;必须考虑到人员、设备、材料的可用性等限制和生产过程中的各种中断&#xff0c;生成一个作业时间表&#xff0c;即生产作业计划。MES系统“…

iOS 接入firebase简易步骤

接入准备 去firebase官网注册应用并下载配置文件GoogleService-Info.plist 接入步骤 1.通过cocopods导入以下两个依赖 pod Firebase/Analytics pod Firebase/Core 2.导入成功后将配置文件GoogleService-Info.plist拖入项目中 3.代码支持 引入#import <Firebase/Firebas…

【云原生系列】第五讲:Knative Eventing 下

目录 序言 1.Parallel介绍 1.1 Parallel Spec ​编辑 2.Sequence 2.1.Sequence Spec 2.2适用场景 2.3 Broker/Trigger 2.4 代码示例 3.投票 序言 三言两语&#xff0c;不如细心探索。 今天整理了一下Eventing 相关知识点 ParallelSequence希望此文&#xff0c;能帮…

C#正则表达式总结

推荐一个专门用于编写正则表达式的网站&#xff1a; regex101: build, test, and debug regex 参考文档&#xff1a; https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F 特殊字符的意义&#xff1a; ^ : 表示字符串的开头 例子&#xff1a; …

局域网的网络硬件主要包括有什么

一、网络服务器 是计算机局域网的核心部件。 网络操作系统是在网络服务器上运行的&#xff0c;网络服务器的效率直接影响整个网络的效率。 因此&#xff0c;一般要用高档计算机或专用服务器计算机作为网络服务器。 二、网络工作站 网络工作站是通过网络接口卡连接到网络上的…

银行软件测试:基于互联网金融平台的测试框架设计与分析

目前互联网金融火的一塌糊涂&#xff0c;基于互联网金融平台的自动化测试的项目也是如火如荼的进行。笔者手头上负责一个p2p项目的测试框架开发&#xff0c;因此如何设计一套有效的测试框架也成为工作所需和互相交流测试经验的必须。进入》软件测试社群学习交流 这个网站的后台…

科研绘图配色方案

科研绘图配色方案 在撰写论文的时候&#xff0c;美观&#xff0c;大气&#xff0c;上档次的图表能够很好地给自己的论文加分。但是在绘制图表的时候往往会面临色彩搭配的问题&#xff0c;选择合适的色彩搭配能够有效地展示自己的方法&#xff0c;但是色彩搭配选择不当的话往往…

Go学习之路:并发(DAY 3)

文章目录前引并发1、Go协程/简单创建2.1、信道/简单创建信道2.2、信道/限制了大小的信道2.3、信道/range close信道3.1、Select语句前引 听了会歌 一看了下今天已经下午2&#xff1a;50了 我们学校也好像开始放学生们回家了 那今天最后就愉快愉快的把我们的 A Tour Of Go 最后…

申报高新技术企业需要哪些条件?

高新技术企业是在国家重点支持的高新技术领域中持续进行科研开发和技术成果转化&#xff0c;形成企业核心自主知识产权&#xff0c;并以此为基础开展生产经营活动的企业。成为高新技术企业以后会减免40%的所得税。 申报高新技术企业需要哪些条件&#xff1f; 第一点&#xff…