数据分析02——numpy模块的在jupyter中的使用

news2024/11/15 15:42:20

0、numpy:

  • 在计算机中会把数学当中的矩阵叫做数组,在很多应用中的表格也就是通过矩阵表示的,所以numpy广泛用于机器学习,数据分析,和图像处理领域。

1、numpy常用方法和函数:

  • 前言:在使用numpy创建数组之前必须先导入模块:import numpy as np
  • 创建一维数组:arr1 = np.array([1, 2, 3])
  • 创建二维数组:arr4 = np.array([[1, 2], [3, 4]])
  • 查看数组维度:arr4.ndim
  • 查看元素数量:arr4.size
  • 查看元素形状:arr4.shape
  • 查询元素的数据类型:arr4.dtype
  • 查看对象的数据类:type(arr4)

  • astype()生成新数组,原数组不变:arr5.astype(float)
  • 创建指定维度和数据类型的空数组:np.empty([2, 3], dtype=int)
  • 三个元素通过零填充:np.zeros(3)
  • 三个元素通过1填充:np.ones(3)
  • 创建指定维度和指定值填充的数组(3维通过8填充):np.full([3, 3], 8)
  • 创建指定步长的一维数组:np.arange(1, 12, 1) //array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
  • 7500-10000,6等分,结束点包含(等差数组):np.linspace(7500, 10000, 6)
  • 以2为底数,从2的1次方到2的10次方,5个元素:np.logspace(1, 10, 5, base=2)

  • [0, 1)的一维数组,5个元素,小数:np.random.rand(5)
  • [0, 1)的二维数组,2行5列,小数:np.random.rand(2, 5)
  • [0, 10)的二维数组,2行3列,小数:np.random.uniform(0, 10, [2, 3])
  • 满足正态分布的一维数组,100个元素,均值为0,标准差为1:np.random.normal(0, 1, 100)
  • [1, 3)的一维数组,10个元素,整数:np.random.randint(1, 3, 10)
  • [0, 5)的二维数组,2行5列,整数:np.random.randint(0, 5, size=[2, 5])

  • 随机种子:作用是重复运行代码而数值不变,必须与随机函数在同一单元格
    np.random.seed(2)
    np.random.randint(1, 10, 3)
  • 打乱数组:arr = np.array([1, 2, 3, 4, 5]);np.random.shuffle(arr)
  • nan表示缺失值:arr = np.array([1, 2, np.nan, 4])
  • 查看缺失值:np.isnan(arr)
    //array([False, False, True, False])
  • 填充缺失值:arr[np.isnan(arr)] = 0
    //array([1., 2., 0., 4.])
  • 删除重复值:
    arr = np.array([1, 2, 2, 3, 3, 3, 4])
    np.unique(arr)
    //array([1, 2, 3, 4])

  • 通过列表创建数组:
    lst2 = [[1, 2], [3, 4]]
    np.asarray(lst2)
  • 通过字符串创建数组(这种方法是首先将字符串转为列表,然后把列表转为数组,直接将字符串转数组则数组中只有一个元素):
    string = ‘python’
    np.asarray(list(string))
  • 通过可迭代对象创建数组:
    it = iter([1, 2, 3, 4, 5])
    np.fromiter(it, dtype=int)
  • 以指定值填充:
    np.full_like([[1, 2], [3, 4]], 6)
    //array([[6, 6],[6, 6]]) 二维数组

  • 数组四则运算:+、-、*、/、**、这些运算都是两个形状相同的数组进行的对应元素之间的运算
  • 数组取整://
  • 取余/取模:%
  • 求相反数:-数组名
  • 求倒数:1/数组名
  • 比较运算:>=、==、<=、!=、这些运算都是两个形状相同的数组进行的对应元素之间的运算
  • 标量运算:数组中每个元素和数值之间的运算(数组名 运算符号 数值)
  • 集合运算:求a和b的交集(np.intersect1d(a, b))、求a和b元素的并集(np.union1d(a, b))、a数组的每个元素是否包含在b数组内(np.in1d(a, b))这里的1d代表1维、差集,a数组减去b数组的元素(np.setdiff1d(a, b));不要求数组和b数组形状一样,集合运算只是两个数组元素的集合之间的运算。

2、数组切片:

  • 前言:列表也能切片,但是列表的计算性能没有数组好。

2.1、一维数组切片规则:正向索引从0开始,反向索引从-1开始,索引是左闭右开的

  • 切片操作:arr[start:stop:step]
    start,开始值
    stop,结束值
    step,步长值
arr = np.array([1, 2, 3, 4])
arr[0:2]	#array([1, 2])

arr = np.arange(10)	#array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr[::-1]	#array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])

2.2、二维数组切片规则:

arr = np.array(
    [[0, 1, 2, 3],
     [4, 5, 6, 7],
     [8, 9, 10, 11]])	# 创建二维数组
lst = [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]	# 创建二维列表
arr[1]	# array([4, 5, 6, 7])
lst[1][2]	# 6

# 二维数组切片
# 逗号前面表示行操作
# 逗号后面表示列操作
arr[:2, 1:]
# array([[1, 2, 3],
#       [5, 6, 7]])

3、数组重塑(需要掌握):

3.1、reshape重塑:reshape(行数, 列数)

  • 重塑前后的元素个数必须一致
  • 重塑后不会修改原数组
# 一维数组
arr1 = np.arange(6)	# array([0, 1, 2, 3, 4, 5])
arr1.reshape(2, 3)	# array([[0, 1, 2],[3, 4, 5]]) 
# 将n个一维数组重塑为n行数组
arr1.reshape(-1, 1)	# 相当于arr1.reshape(6, 1)

# 二维师叔祖
arr2 = np.array(
    [[0, 1, 2],
     [3, 4, 5]])
arr10 = arr2.reshape(3, 2)	#array([[0, 1], [2, 3], [4, 5]])
# 将高维数组重塑为一维数组叫做扁平化
arr2.reshape(-1)	# array([0, 1, 2, 3, 4, 5])

3.2、resize重塑

  • 重塑前后的元素个数可以不一致
  • 重塑后会修改原数组
    • 重塑后比原尺寸小:自动截断
    • 重塑后比原尺寸大:以0填充

3.3、行列转置

arr6 = np.arange(12).reshape(3, 4)
'''
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
'''
# transpose
arr6.T	# T是数组的一个性质
'''
array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11]])
'''
arr6.transpose()	# transpose是一个函数
'''
array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11]])
'''


4、数组的增删改查:

4.1、合并数组:将多个数组合并为一个数组

n1 = np.array(
    [[1, 2],
     [3, 4],
     [5, 6]])
n2 = np.array(
    [[10, 20],
     [30, 40],
     [50, 60]])
# 左右合并
np.hstack((n1, n2))
np.column_stack((n1, n2))
'''
array([[ 1,  2, 10, 20],
       [ 3,  4, 30, 40],
       [ 5,  6, 50, 60]])
'''
# 上下合并
np.vstack((n1, n2))
np.row_stack((n1, n2))
'''
array([[ 1,  2],
       [ 3,  4],
       [ 5,  6],
       [10, 20],
       [30, 40],
       [50, 60]])
'''

4.2、拆分数组:将一个数组拆分为多个子数组

n3 = np.arange(24).reshape(6, 4)
'''
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15],
       [16, 17, 18, 19],
       [20, 21, 22, 23]])
'''
# 左右拆分
np.hsplit(n3, 2)
# np.hsplit(n3, 2)[0]	# 拆分的第一部分
# np.hsplit(n3, 2)[1]	# 拆分的第二部分
'''
[array([[ 0,  1],
        [ 4,  5],
        [ 8,  9],
        [12, 13],
        [16, 17],
        [20, 21]]),
 array([[ 2,  3],
        [ 6,  7],
        [10, 11],
        [14, 15],
        [18, 19],
        [22, 23]])]
'''
# 上下拆分
np.vsplit(n3, 2)
# np.vsplit(n3, 2)[0]
# np.vsplit(n3, 2)[1]
'''
[array([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]]),
 array([[12, 13, 14, 15],
        [16, 17, 18, 19],
        [20, 21, 22, 23]])]
'''


4.3、新增数据

aa = np.arange(6).reshape(2, 3)
'''
array([[0, 1, 2],
       [3, 4, 5]])
'''
# axis=0: 行
# axis=1: 列
np.append(aa, [[6, 7, 8]], axis=0)
'''
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
'''
np.append(aa, [[10], [20]], axis=1)
'''
array([[ 0,  1,  2, 10],
       [ 3,  4,  5, 20]])
'''

4.4、删除数据

ad = np.arange(6).reshape(2, 3)
'''
array([[0, 1, 2],
       [3, 4, 5]])
'''
np.delete(ad, 1, axis=0)
'''
array([[0, 1, 2]])
'''
np.delete(ad, 0, axis=1)
'''
array([[1, 2],
       [4, 5]])
'''
# 还可以删除多行或者多列
np.delete(ad, [0,1], axis=1)
'''
array([[2],
       [5]])
'''

4.5、修改数组和条件判断

  • 修改数组,修改的是原数组
a1 = np.arange(6).reshape(2, 3)
# 修改行
a1[1] = [0, 0, 0]
# 修改列
a1[:, 1] = [0, 0]
# 修改0行1列的元素值为2
a1[0:,1] = 2
# 条件判断
np.where(a1 > 1, 6, 9)
'''
array([[9, 9, 6],
       [6, 6, 6]])
'''
# 筛选大于1的元素
a1[np.where(a1 > 1)]
# array([2, 3, 4, 5])

4.6、数组赋值/视图/复制/深拷贝

# 数组赋值(相当于起了别名,没有拷贝,is是身份运算)
a = np.arange(10)
b = a
b is a	# True
a[0] = 8 
b	# array([8, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 视图(快捷方式,浅拷贝,不同的数组对象共享同一数据)
a = np.arange(10)
c = a.view()
c is a 	# False
a[0] = 8 	# array([8, 1, 2, 3, 4, 5, 6, 7, 8, 9])
# 数组复制(浅拷贝、不同的对象和数据)
a = np.arange(10)
d = a.copy()
d is a 		# False
a[0] = 8 
d	# array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# python中深拷贝只有一种
import copy
d = copy.deepcopy(a)
  • 在Python中,复制一个变量有两种方式:深拷贝和浅拷贝。当使用浅拷贝(shallow copy)时,创建的新对象与原始对象共享内存,也就是说,如果修改其中一个对象,另一个对象也会改变。而使用深拷贝(deep copy)时,完全复制一份独立的对象,包含了对象及其所有子对象的完整拷贝,修改其中任意一个对象,都不会对其他对象产生影响。数组复制的浅拷贝虽然修改一个对象,另一个对象不会发生改变,原因不是复制了一份独立的对象,而是在独立对象之上做了封装。如下:
    在这里插入图片描述

总结:以上知识都是numpy中的一些常用方法,做笔记方便日后补充和查找。

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

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

相关文章

腾讯云轻量应用服务器使用限制说明(十大限制)

腾讯云轻量应用服务器和云服务器CVM相比具有一些限制&#xff0c;比如轻量服务器不支持更换内网IP地址&#xff0c;轻量服务器只能套餐整体升级且不支持降配&#xff0c;轻量不支持用户自定义配置私有网络VPC&#xff0c;还有如实例配额、云硬盘配额、备案限制和内网连通性等限…

Ububtu20.04 无法连接外屏(显卡驱动问题导致)

Ububtu20.04 无法显示第二个屏幕&#xff08;显卡驱动问题&#xff09; Ububtu20.04 无法显示第二个屏幕&#xff08;显卡驱动问题&#xff09; Ububtu20.04 无法显示第二个屏幕&#xff08;显卡驱动问题&#xff09; 1. 问题描述2. 解决方案 1. 问题描述 一开始我的ububt…

JavaGuide复习1——常见面试题总结部分

1、关于包装类的缓存机制 两种浮点数类型的包装类 Float,Double 并没有实现缓存机制。 对应源码&#xff1a; 拆装箱 都是调用了包装类的方法&#xff1a;valueOf&#xff08;基本转包装&#xff09;、xxxValue&#xff08;包装转基本&#xff09; 注意char char在Java中占用…

Illustrator如何进行文本的创建与编辑之实例演示?

文章目录 0.引言1.创建点文字2.串接文本3.石刻文字 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对Illustrator进行了学习&#xff0c;本文通过《Illustrator CC2018基础与实战》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对文本的创建与编辑进…

shell脚本编程基础

shell 文件的建立和执行 shell脚本是将shell命令在文件中编写&#xff0c;从而实现一次执行很多shell命令。如&#xff1a; # ab.sh # !/bin/bash echo "Welcome Linux" cd mkdir myjsjsj echo "Your dir is" pwd可以看到这就是多个shell命令。 执行前需…

【数据结构】选择排序(详细)

选择排序 1. 直接选择排序2. 堆排序2.1 堆2.2 堆的实现&#xff08;以大根堆为例&#xff09;2.3 堆排序 3. 堆排序&#xff08;topK问题&#xff09; 1. 直接选择排序 思想 以排升序为例。以a[i]为最大值&#xff08;或最小值&#xff09;&#xff0c;从a[i1]到a[n-1-i]比较选…

【5G RRC】NR 小区接入控制

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

Wind10安装cuDNN,几分钟搞定

cuDNN的安装过程 1、下载cuDNN 因为之前的博文“目标检测第3步”下载的CUDA版本是11.1&#xff0c;那么我们就要找到与CUDA11.1版本对应的cuDNN版本。地址为&#xff1a;cuDNN Archive | NVIDIA Developer 2、安装cuDNN 下载到的cuDNN文件是一个压缩包&#xff0c;解压缩之后…

并发编程03:Java锁

文章目录 3.1 乐观锁和悲观锁3.2 通过8种情况演示锁运行案例&#xff0c;看看锁到底是什么3.2.1 锁相关的8种案例演示code3.2.2 synchronized有三种应用方式3.2.3 从字节码角度分析synchronized实现3.2.4 反编译synchronized锁的是什么3.2.5 对于Synchronized关键字 3.3 公平锁…

创维高安版-E900-Hi3798MV100-强刷卡刷固件包-当贝纯净桌面

创维高安版-E900-Hi3798MV100-强刷卡刷固件包-当贝纯净桌面-内有主板图短接点和教程 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量精简内置…

关于百度地图开放平台api覆盖物“自定义Marker图标”不能正常显示的解决方案

“自定义Marker图标”不能正常显示&#xff08;用网上图片能正常显示&#xff0c;用本地图片就不能显示&#xff09;&#xff0c; 分两种情况&#xff1a; 1.网上图片&#xff0c;往往是图片的url地址有问题&#xff0c;也可能是url地址的图片失效了。 2.本地图片&#xff0c;这…

linux软件包管理和进程管理

目录标题 RPM管理工具rpm安装rpm查询功能rpm软件包升级、卸载 YUM管理工具建立本地光盘源配置互联网源yum工具管理软件包 ps指令动态查看进程top RPM管理工具 软件包&#xff08;本地–网络&#xff09;—安装&#xff08;软件包&#xff09;—卸载&#xff08;软件&#xff0…

【Python】【进阶篇】24、Django if标签详解

目录 24、Django if标签详解1. 模板标签1) 判断逻辑的 if 标签 24、Django if标签详解 本节继续讲解 Django 的模板语言&#xff0c;Django 内置了许多标签用于简化模板的开发过程&#xff0c;同时 Django 也支持自定义标签&#xff0c;这极大的方便了 Web开发者&#xff0c;下…

拓展系统变量

文章目录 拓展系统变量 使用方式拓展系统变量获取服务端IP - $ZSERVERIP获取客户端IP - $ZCLIENTIP获取最大许可数量 - $ZMAXLICENSE获取当前系统名称 - $ZOSNAME获取字符串最大长度 - $ZMAXSTRINGLEN获取当前登录用户ID - $ZUSERID获取当前登录用户名 - $ZUSERNAME系统最近错误…

【Linux从入门到精通】C语言模拟实现进度条小程序

在Linux下&#xff0c;我们安装软件时会经常看到进度条&#xff0c;来告知我们安装的进度。我们不妨自己模拟实现一个进度条&#xff0c;看看其中的细节。模拟实现进度条并不困难&#xff0c;但其中的细节我们又不可忽视。本篇文章会对模拟实现进度条进行详解。 文章目录 一、进…

顺序表(数据结构)---排队啦!

目录 前言&#xff1a; 1.线性表的性质 2.静态数组or动态数组 2.1静态数组 2.2动态数组 3.结构体的创建 4*接口函数的详细讲解 4.1初始化结构体 4.2尾插 4.3打印数据 4.4用完后销毁创建的堆空间 4.5 尾删 4.6头插 4.7头删 4.8查找 4.9任意位置插入 4.10任意位…

springboot+jsp商务安全邮箱(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot商务安全邮箱。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&…

谈谈Edge浏览器新出的分屏功能

谈谈Edge浏览器新出的分屏功能 前言 在 2023 年三月份微软为 Microsoft Edge 浏览器的稳定版本带来了一个新功能 —— 分屏浏览 (Split Screen)&#xff0c;此功能允许用户在当前页面以左右视图的形式并排打开两个标签页面&#xff0c;作用上类似于应用的分屏可以让浏览器同时处…

Kali Linux部署qemu虚拟化启动img镜像文件

一、先下载最新版本的Kali环境 Kali Linux官网下载网址&#xff1a;Get Kali | Kali Linux 安装到VMware里面后&#xff0c;调整内存大小为4G&#xff08;如果自己电脑内存32G的话&#xff0c;可以调整为8G&#xff09; 更新一下Kali Linux源 然后安装如下软件 apt install qe…

二十九、交换机堆叠与集群

文章目录 堆叠技术概述一、可靠组网二、堆叠技术名称三、华为堆叠原理1、基本概念2、堆叠端口&#xff1a;&#xff08;逻辑端口&#xff09;3、堆叠拓扑类型4、堆叠硬件要求 四、堆叠配置示例&#xff08;华三模拟器&#xff09;1、sw1&#xff1a;2、sw2&#xff1a;3、激活i…