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

2023-11-07

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中的一些常用方法,做笔记方便日后补充和查找。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据分析02——numpy模块的在jupyter中的使用 的相关文章

随机推荐

  • 时间复杂度和空间复杂度计算

    之前一直对于时间复杂度 O 1 O n O n 3 等弄不清楚是如何计算的 所以学习一番在此分享 背景 算法是指用来操作数据 解决程序问题的一组方法 对于同一个问题 使用不同的算法 也许最终得到的结果是一样的 但在过程中消耗的资源和时间却会
  • css实现border渐变样式

    项目中用到了border的渐变使用 虽然可以使用图片 但不如代码实现效果好 所以实现了border两头渐变的效果 效果如图 text desc width 24 height 100 box sizing border box 必须设置bo
  • BBR算法

    BBR算法 简述 bbr算法为google在2016年提出 用于改善tcp的性能 提升稳定性 降低延迟 更好地应对网络损伤 在整个算法调节周期中 bbr算法都在尽力维持最大bw和最小rtt 对比传统的tcp算法 传统算法不能区分是拥塞导致的
  • Qt命令行的使用

    以前使用命令行指定参数启动Qt程序都是用argc和argv 有时用Build环境设置 现在才知道原来Qt从5 2就有了两个类 QCommandLineParser 和 QCommandLineOption 专门用于命令行启动 它们属于Cor
  • 主机漏洞利用演示MS17-010(永恒之蓝)

    ms17 010危害 对被攻击方的电脑造成蓝屏 申明 本篇文章的用意仅做学习使用 网络搭建环境 软件 Vmware Workstation 17 攻击机 Kali 靶机环境 Windows 7 Nmap软件的基本功能 1 主机发现 Host
  • .NET平台框架解读

    概述 微软在 NET跨平台之路上付出了巨大的艰辛 同时做了海量的工作 首先推出了统一的API标准规范库 NET Standard 并不断补充完善标准库 截止目前 2023 6 30 最新版本为 NET Standard 2 1 2016年发
  • 最详细的Java入门到入土完整学习教程,学Java先收藏了!

    目录 Java是一门广泛应用于软件开发的高级编程语言 它以其跨平台性 面向对象的特性和丰富的生态系统而受到广大开发者的喜爱 本教程将带您从Java的入门阶段一直深入到精通的水平 涵盖了40种常用的Java开发技术栈 并结合中国的应用场景给出
  • yolov5,yolov4,yolov3乱七八糟的

    结构对比 别问这么好看的图哪来的 问就是善假于人 toulai 的 下面简单讲讲图中我认为比较明显的变化 yolov4 backbone 全部用的都是Mish激活函数取代了yolov3的Leakyrelu 在backbone就开始使用con
  • 【PCL】的五大依赖库及作用

    安装点云PCL Point Cloud Library 库时 需要额外安装5个依赖库 它们有什么作用呢 如下 Boost 用于共享指针和多线程 Eigen 一个标准的C 模板库用于线性代数 矩阵 向量等计算 FLANN Fast Appro
  • SpringBoot集成Spring Security

    1 Spring Security介绍 Spring security 是一个强大的和高度可定制的身份验证和访问控制框架 它是确保基于Spring的应用程序的标准 来自官方参考手册 Spring security 和 shiro 一样 具有
  • 模型训练到一个新batch时会被killed【原因以及解决方法】

    模型训练到一个新batch时会被killed 原因以及解决方法 1 减小batchsize 2 减小num workers 在Dataloader函数中
  • 【区块链】周鸿祎:写区块链最好的一篇文章;曾鸣:大部分关于区块链未来伟大前景的讨论还只是猜想而已

    区块链就是未来 也是一种回到互联网本来意义的方式 文 机器之能 注 奇虎360创始人周鸿祎说 这是了解区块链最深入浅出的一篇文章 以下正文 这组词序并没有任何意义 真正让它们有价值的地方在于 这个词序是由一个被称为 MetaMask 的软件
  • 类对象的私有数据是无法被直接访问的,但是为什么在复制构造函数中,可以直接通过引用访问被复制对象的私有数据?

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 Sma
  • csdn获取自己所有博客的地址,包含分页

    获取自己的所有博客地址 一 步骤 1 先获取首页看到的部分 2 正则截取每月发表的博客数 总和即是所有的博客数 3 分页请求获取每一页的博客 4 正则截取获得每篇博客的地址 二 代码 import re import math import
  • 感应(异步)电机无速度传感器技术—TI例程解析

    电机控制系列文章 感应 异步 电机磁场定向控制MATLAB Simulink建模 感应 异步 电机磁场定向控制电流环PI控制参数设计 感应 异步 电机磁场定向控制速度环PI控制参数设计 感应 异步 电机无速度传感器技术 电压模型法 目录 电
  • Python实现简单猜数字游戏,输入不是整数时,给出提示

    猜数字游戏 要求 1 使用random 函数产生一个预设整数 让用户通过键盘输入所猜的数 如果小于预设的数 显示 遗憾 太小了 如果大于预设的数 显示 遗憾 太大了 如此循环 至猜中 提示 恭喜 预测N次 你猜中了 2 当用户输入的不是整数
  • thinkPHP_V5漏洞

    php rce攻防世界 百度thinkphpv5 查询到其存在过漏洞 在网页中随便注入 可观察到其版本为V5 0 20 再上旬该版本漏洞 描述为 只要在url后添加 s index think app invokefunction func
  • 全栈之前端

    欢迎关注 全栈工程师修炼指南 公众号 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 花开堪折直须折 莫待无花空折枝 作者主页 https www weiyigeek top 博客 https b
  • (董付国)Python 学习笔记---Python序列(4)

    字典应用案例 已有大量用户对若干电影的打分数据 现有某用户 也看过一些电影并进行过评分 要求根据已有打分数据为该用户进行推荐 1 代码采用基于用户的过滤协同算法 也就是根据用户喜好来确定与当前用户最相似的用户 然后再根据最相似用户的喜好为当
  • 数据分析02——numpy模块的在jupyter中的使用

    0 numpy 在计算机中会把数学当中的矩阵叫做数组 在很多应用中的表格也就是通过矩阵表示的 所以numpy广泛用于机器学习 数据分析 和图像处理领域 1 numpy常用方法和函数 前言 在使用numpy创建数组之前必须先导入模块 impo