python基础 | Numpy基础

news2024/10/6 1:41:51

文章目录

  • 📚数组操作
    • 🐇np数组的构造
      • 🥕np数组的构造
      • 🥕特殊补充
    • 🐇np数组的变形和合并
      • 🥕转置
      • 🥕合并操作
      • 🥕维度变换
    • 🐇np数组的切片和索引
      • 🥕一维数组索引与切片
      • 🥕二维数组索引和分片
      • 🥕补充布尔索引
      • 🥕分片规则大致理解
  • 📚常用函数
    • 🐇numpy常用统计函数
      • 🥕离中趋势
      • 🥕集中趋势
    • 🐇numpy实用方法
  • 📚补充
    • 🐇轴概念的补充
    • 🐇二维数组计算
  • 📚小结

📚数组操作

import numpy as np

🐇np数组的构造

🥕np数组的构造

ndarray 是 N-dimensional array,即 N 维数组。数组是一系列 相同类型 数据的集合,它其实和列表很相似,只是列表中的元素类型可以是任意的。
在这里插入图片描述

  1. 建一个多维数组很简单,将一个列表作为参数传入numpy中的array()方法即可,打印出来的多维数组和列表也很像,只是少了分隔的逗号

    import numpy as np   
    data = np.array([1, 2, 3])
    print(data)
    # 输出:[1 2 3]
    print(type(data))
    # 输出:<class 'numpy.ndarray'>
    
  2. 两个快速创数组实用方法——np.ones()np.zeros()

    ones = np.ones(3)
    print(ones)
    # 输出:[1. 1. 1.]
    zeros = np.zeros(3)
    print(zeros)
    # 输出:[0. 0. 0.]
    
    • 分别生成元素全为1和0的多维数组,np.ones() 和 np.zeros() 的参数用于指定生成的多维数组里有多少个元素
    • 生成出来的不是 1 和 0,而是 1. 0.。这是因为默认生成的是浮点数,numpy 会省略小数点后的 0,因此 1.00.0 变成了 1.0.
  3. 单位矩阵生成—— np.eyes(3)
    在这里插入图片描述

  4. 和列表进行类比,二维数组相当于单层的嵌套列表

    # 单层嵌套列表
    nested_list = [[1, 2], [3, 4]]
    print(nested_list)
    # 输出:[[1, 2], [3, 4]]
    # 二维数组
    data = np.array(nested_list)
    print(data)
    # 输出:
    # [[1 2]
    #  [3 4]]
    
    • 嵌套列表就是列表中的元素也是列表的列表
    • 可以看到,通过嵌套列表创建的二维数组也是用空格分隔的,并且分成了两行。列表中的第一个元素 [1, 2] 在第一行,第二个元素 [3, 4] 在第二行。
    • 更多维的数组的创建,只要传入嵌套层数更多的列表即可。创建三维数组的方式如下
      在这里插入图片描述
  5. ones() zeros()在二维数组的应用
    在这里插入图片描述

🥕特殊补充

  • 等差数列
    • np.linspace(起始,终止(包含),样本个数)
      在这里插入图片描述
    • np.arange(起始,终止(不包含),步长)
      在这里插入图片描述
  • 关于arange()
    • 一个参数时:参数值为终点(不包括),起点取默认值0,步长取默认值1
    • 两个参数时:第一个参数为起点,第二个参数为终点(不包括),步长取默认值1
    • 三个参数时:第一个参数为起点,第二个参数为终点(不包括),第三个参数为步长,步长支持小数
    # 生成 1-9 的数组
    print(np.arange(1, 10))
    # 输出:[1 2 3 4 5 6 7 8 9]
    
    # 生成 0-9 的数组
    print(np.arange(10))
    # 输出:[0 1 2 3 4 5 6 7 8 9]
    
    # 生成 1-9 的数组,步长为 2
    print(np.arange(1, 10, 2))
    # 输出:[1 3 5 7 9]
    
  • 随机矩阵
    • np.random.uniform(5, 15, 3) , 从5到15随机生成3个数
    • np.random.randn(3) ,生成标准正态分布
    • np.random.randint(low, high, size) , randint可以指定生成随机整数的最小值最大值(不包含)和维度大小

      在这里插入图片描述

      # 不传入形状时
      print(np.random.randint(0, 5))
      # 输出:3
      # 形状为一维数组时
      print(np.random.randint(0, 5, 3))
      # 输出:[4 0 1]
      # 形状为二维数组时
      print(np.random.randint(0, 5, (2, 3)))
      # 输出:
      # [[0 2 1]
      #  [4 2 0]]
      
    • np.random.choice(my_list, 2, replace=False, p=[0.1, 0.7, 0.1 ,0.1])
      在这里插入图片描述
    • numpy 中的np.random.rand()方法和 Python 中random.random()方法类似,都是生成 [0, 1) 之间的随机小数。不同的是,numpy 中的 np.random.rand() 方法可以生成多个 [0, 1) 之间的随机小数,只需我们传入要生成的随机数组的形状(shape)即可。
      # 不传参数时
      print(np.random.rand())
      # 输出:0.1392571183916036
      # 传入一个参数时
      print(np.random.rand(3))
      # 输出:[0.7987698  0.52115291 0.70452156]
      # 传入多个参数时
      print(np.random.rand(2, 3))
      # 输出:
      # [[0.08539006 0.97878203 0.23976172]
      #  [0.34301963 0.48388704 0.63304024]]
      

🐇np数组的变形和合并

🥕转置

在这里插入图片描述

🥕合并操作

在这里插入图片描述

🥕维度变换

参考博客
reshape——能够帮助用户把原数组按照新的维度重新排列。在使用时有两种模式,分别为C模式和F模式,分别以逐行和逐列的顺序进行填充读取。
在这里插入图片描述


🐇np数组的切片和索引

🥕一维数组索引与切片

  • 索引——和列表基本相同

    data = np.array([1, 2, 3])
    print(data[0])
    # 输出:1
    
  • 分片——和列表基本相同

    data = np.array([1, 2, 3])
    print(data[0:2])  # 获取索引为 0 和 1 的元素
    # 输出:[1 2]
    # 获取前 2 个元素
    print(data[:2])
    # 输出:[1 2]
    # 获取后 2 个元素
    print(data[-2:])
    # 输出:[2 3]
    # 获取所有元素
    print(data[:])
    # 输出:[1 2 3]​
    

    在这里插入图片描述

    # 列表
    lst_data = [1, 2, 3]
    lst_data2 = lst_data[:]
    lst_data2[0] = 6
    print(lst_data)
    # 输出:[1, 2, 3]
    # 多维数组
    arr_data = np.array([1, 2, 3])
    arr_data2 = arr_data[:]
    arr_data2[0] = 6
    print(arr_data)
    # 输出:[6 2 3]
    

    在这里插入图片描述

  • 分片支持传入第三个参数——步长。即分片时每隔几个数据取一次值,步长的默认值为 1。

    data = np.array([1, 2, 3, 4, 5, 6])
    print(data[::2])  # 省略前两个参数
    # 输出:[1 3 5]
    
    • 当步长为负数时,会将顺序反转。我们可以利用这个特性来实现列表或多维数组的快速反转。

      data = np.array([1, 2, 3, 4, 5, 6])
      print(data[::-1])  # 省略前两个参数
      # 输出:[6 5 4 3 2 1]
      

🥕二维数组索引和分片

二维数组的索引和分片同样和一维数组类似,只是在行索引的基础上再加上列索引。形如 data[m, n],其中 data 是二维数组,m 是行索引或分片,n 是列索引或分片。

在这里插入图片描述

data = np.array([[1, 2], [3, 4], [5, 6]])
print(data[0, 1])
# 输出:2
print(data[:, 0]) 
# 输出:[1 3 5]
print(data[1:3])
# 输出:
# [[3 4]
#  [5 6]]

data[0:2, 0] data[0:2, 0:1] 获取的都是 1 和 3 这两个元素,但其结果一个是 [1 3],一个是 [[1] [3]],实际上并不相同。
在这里插入图片描述

🥕补充布尔索引

在这里插入图片描述
区别在于:and 改用 &,or 改用 |,not 改用 ~,并且每个条件要用括号括起来。

🥕分片规则大致理解

在这里插入图片描述


📚常用函数

🐇numpy常用统计函数

写法都是数组名.函数()

🥕离中趋势

在这里插入图片描述

🥕集中趋势

在这里插入图片描述


在这里插入图片描述


🐇numpy实用方法

  • genfromtxt():用于文件的读取

    • 常用的参数有两个。第一个参数是数据源,可以是本地文件的路径,也可以是网络文件的地址。delimiter 参数用于指定分隔符,CSV 文件一般是用逗号作为分隔符,当遇到其他符号分隔的文件时,用 delimiter 参数进行指定即可。
    • genfromtxt() 方法的返回值是一个多维数组
    • data = np.genfromtxt('data.csv', delimiter=',')
  • numpy求均方误差
    在这里插入图片描述

    • 均方误差和方差形式上相似,不同在于:方差是数据集与均值的关系,而均方误差是数据集与真实值之间的关系
  • where:一种条件函数,可以指定满足条件与不满足条件位置对应的填充值
    在这里插入图片描述

  • nonzero返回非零数的索引,argmax, argmin分别返回最大和最小数的索引
    在这里插入图片描述

  • 数组名.any()指当序列至少 存在一个True或非零元素时返回True,否则返回False

  • 数组名.all()指当序列元素全为True或非零元素时返回True,否则返回False


📚补充

🐇轴概念的补充

在这里插入图片描述
关注一维和二维axis=0所指方向的不同

在通用方法中,通过 axis 参数可以指定计算方向。
在这里插入图片描述

data = np.array([[1, 2], [5, 3], [4, 6]])
# 不指定 axis
print(data.max())
# 输出:6
# axis=0
# 每一列都比一比
print(data.max(axis=0))
# 输出:[5 6]
# axis=1
# 每一行都比一比
print(data.max(axis=1))
# 输出:[2 5 6]

🐇二维数组计算

在这里插入图片描述

在这里插入图片描述


📚小结

在这里插入图片描述

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

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

相关文章

嵌套走马灯Carousel

Carousel 的应用很广泛&#xff0c;基础用法这里不多做阐述&#xff0c;感兴趣的可以去element-gui了解Carousel 组件。 今天主要是梳理嵌套走马灯的逻辑&#xff0c;背景如下&#xff1a; 需要对项目做一个展示&#xff0c;项目可能有一个或多个&#xff0c;同时一个项目可能…

2023爱分析·云原生智能运维中台市场厂商评估报告:秒云(miaoyun.io)

目录 1. 研究范围定义 2. 云原生智能运维中台市场定义 3. 厂商评估&#xff1a;秒云&#xff08;miaoyun.io&#xff09; 4. 入选证书 1. 研究范围定义 数字化时代&#xff0c;应用成为企业开展各项业务的落脚点。随着业务的快速发展&#xff0c;应用的功能迭代变得越…

Scala集合详解(第七章:集合、数组、列表、set集合、map集合、元组、队列、并行)(尚硅谷笔记)

集合第七章:集合7.1 集合简介7.1.1 不可变集合继承图7.1.2 可变集合继承图7.2 数组7.2.1 不可变数组7.2.2 可变数组7.2.3 不可变数组与可变数组的转换7.2.4 多维数组7.3 列表 List7.3.1 不可变 List7.3.2 可变 ListBuffer7.4 Set 集合7.4.1 不可变 Set7.4.2 可变 mutable.Set7.…

蓝牙运动耳机什么牌子的好、运动蓝牙耳机排行榜推荐

近些年&#xff0c;户外运动兴起&#xff0c;运动耳机迎来爆发增长&#xff0c;拒绝运动乏味&#xff0c;追求健康运动方式&#xff0c;已经成为当下年轻人的共同诉求。跑步骑行听音乐&#xff0c;已经是运动爱好者再熟悉不过的操作&#xff0c;很多人在运动中离不开音乐的节奏…

双检测人脸防伪识别方法(活体检测+人脸识别+关键点检测+人像分割)

双检测人脸防伪识别=人脸检测+活体检测+人脸识别 1.人脸关键点+语义分割 使用mediapipe进行视频人脸关键点检测和人像分割: import time import cv2 import mediapipe as mp import numpy as npmp_drawing = mp.solutions.drawing_utils mp_drawing_styles = mp.solution…

定了:Python3.7,今年停止更新~

大家好&#xff0c;这里是程序员晚枫。 今天给大家分享一个来自Python官网的重要消息&#xff1a;Python3.7马上就要停止维护了&#xff0c;请不要使用了&#xff01; 官网链接&#xff1a;https://devguide.python.org/versions/ 停更的后果是什么&#xff1f; 周末翻阅Py…

从功能测试(点点点)到进阶自动化测试,实现薪资翻倍我只用了3个月时间

前言 从事测试工作已3年有余了&#xff0c;今天想聊一下自己刚入门时和现在的今昔对比&#xff0c;虽然现在也没什么成就&#xff0c;只能说笑谈一下自己的测试生涯&#xff0c;各位看官就当是茶余饭后的吐槽吧&#xff0c;另外也想写一写自己的职场感想&#xff0c;希望对刚开…

实例4:树莓派GPIO控制舵机转动

实例4&#xff1a;树莓派GPIO控制舵机转动 实验目的 通过背景知识学习&#xff0c;了解舵机的外观及基本运动方式。了解四足机器人mini pupper腿部单个舵机的组成结构。通过GPIO对舵机进行转动控制&#xff0c;熟悉PWM。了解mini pupper舵机组的整体调零。 实验要求 使用Py…

【vue2每日小知识】实现directive自定义指令的封装与全局注册

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;将我们的自定义指令directive统一管理并批量注册 目录 一、directive自定义指令介绍 二…

LeetCode——752. 打开转盘锁

一、题目 你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字&#xff1a; ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转&#xff1a;例如把 ‘9’ 变为 ‘0’&#xff0c;‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个…

Python每日一练(20230222)

目录 1. 柱状图中最大的矩形 2. 汇总区间 3. 寻找旋转排序数组中的最小值 1. 柱状图中最大的矩形 难度&#xff1a;困难 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出…

IDEA工具系列之连接Linux

我们在开发的时候&#xff0c;用IDEA开发程序&#xff0c;用XSHELL来管理服务器&#xff0c;这两个工具切换比较麻烦。有没有用IDEA来连接Linux。当然有&#xff0c;下面有实践步骤&#xff1a; 首先&#xff1a;连接Linux 打开IDEA->Tools->Start SSH Session 其中1&…

MySQL------窗口函数

一、窗口函数定义 1、 适用场景及分类 怎么样得到各部门工资排名前N名员工列表? 查找各部门每人工资占部门总工资的百分比&#xff1f; 累计求和如何计算&#xff1f; 连续统计N天登陆的用户&#xff1f;以上类型问题均使用窗口函数可以解决&#xff0c;这类需求都有一个共同…

51单片机串口使用

文章目录前言一、串口概念二、中断中的RI、TI和SUBF1.RI2.TI3.SUBF三、串口波特率的计算四、代码的编写总结前言 今天将为大家讲解51单片机的串口原理及代码编写。 一、串口概念 51单片机串口是一种通信接口&#xff0c;它可以将51单片机与外部设备连接起来&#xff0c;实现…

单片机输入输出模式

单片机输入输出模式输入模式模拟输入、浮空输入、上拉输入、下拉输入GPIO输出模式推挽输出、开漏输出、复用推挽输出、复用开漏输出。上下拉电阻上拉电阻下拉电阻输入模式 模拟输入、浮空输入、上拉输入、下拉输入 模拟输入&#xff1a;I/O端口的模拟信号&#xff08;电压信号…

Python入门自学进阶-Web框架——32、上课、作业流程开发

对学员上课、作业进行管理。首先对几个表&#xff0c;即model用途进行阐述&#xff1a;课程表存放要开什么课&#xff0c;有了课程表&#xff0c;就要有班级&#xff0c;如开了Python入门课程&#xff0c;再根据学员人数&#xff0c;组成班级&#xff0c;如Python入门课程一班、…

报考浙大MBA项目的基本常识信息

一、项目简介 以培养具有国际视野、创新创业精神、卓越领导能力和高度社会责任感的中高级管理人才和创业型人才为己任。通过对引领时代发展的经典管理思想和前沿管理理念的传授&#xff0c;以及对推动行业健康发展的企业管理实践的研讨&#xff0c;来培养和提升学员的职业意…

一个测试工程师的7年感悟 ---- 致在一路独行的你(别放弃)

前言 不知不觉在软件测试行业&#xff0c;摸爬滚打了7年之久。这一路上也留下了许许多多令我难以忘记的故事。有刚入行时的迷茫&#xff0c;有学习技术路上踩过的坑&#xff0c;有做项目连夜敲代码的悲情也有迎来项目成功上线的欢愉&#xff0c;有太多太多值得铭记的瞬间&…

JUC-day02

JUC-day02 集合的线程安全callable和futureJUC三个工具类(练习)读写锁: 共享锁 独占锁(练习)AQS: 实现原理(核心方法)CAS: 原理–>可见性关键字 1 集合的线程安全(重点) 1.1 集合操作Demo NotSafeDemo public static void main(String[] args) {List list new ArrayLis…

Java集合(二)---Map

1.什么是Hash算法哈希算法是指把任意长度的二进制映射为固定长度的较小的二进制值&#xff0c;这个较小的二进制值叫做哈希值static final int hash(Object key) {int h;return (key null) ? 0 : (h key.hashCode()) ^ (h >>> 16);}以上是HashMap中的hash算法代码2…