python打卡day16

NumPy 数组基础

因为前天说了shap,这里涉及到数据形状尺寸问题,所以需要在这一节说清楚,后续的神经网络我们将要和他天天打交道。

知识点:

  1. numpy数组的创建:简单创建、随机创建、遍历、运算
  2. numpy数组的索引:一维、二维、三维
  3. SHAP值的深入理解

作业:今日知识点比较多,好好记忆下

1. 理解数组的维度 (Dimensions)

NumPy 数组的维度或称为轴 (Axis)的概念,与我们日常理解的维度非常相似。直观判断:数组的维度层数通常可以通过打印输出时中括号 `[]` 的嵌套层数来初步确定:

 一层 `[]`:一维数组。两层 `[]`:二维数组。三层 `[]`:三维数组,依此类推。

2. NumPy 数组与深度学习 Tensor 的关系

在后续进行频繁的数学运算时,尤其是在深度学习领域,对 NumPy 数组的理解非常有帮助,因为 PyTorch 或 TensorFlow 中的Tensor张量本质上可以视为支持 GPU 加速和自动微分的 NumPy 数组。掌握 NumPy 的基本操作,能极大地降低学习 Tensor 的门槛。关于 NumPy 更深入的性质,我们留待后续探讨。

3. 一维数组 (1D Array)

一维数组在结构上与 Python 中的列表(List)非常相似。它们的主要区别在于:

打印输出格式: 当使用 `print()` 函数输出时:NumPy 一维数组的元素之间默认使用空格分隔。Python 列表的元素之间使用逗号分隔。

# 分清楚列表和数组的区别
print([7, 5, 3, 9])  # 输出: [7, 5, 3, 9](逗号分隔)
print(np.array([7, 5, 3, 9]))  # 输出: [7 5 3 9](空格分隔)

 4. 二维数组 (2D Array)

二维数组可以被看作是“数组的数组”或者一个矩阵。其结构由两个主要维度决定:

  • 行数:代表整个二维数组中包含多少个一维数组。
  • 列数:代表每个一维数组(也就是每一行)中包含多少个元素。

值得注意的是,二维数组不一定是正方形(即行数等于列数),它可以是任意的 `n * m` 形状,其中 `n` 是行数,`m` 是列数。

 5. 数组的创建

NumPy 的 `array()` 函数非常灵活,可以接受各种“序列型”对象作为输入参数来创建数组。这意味着你可以将 Python 的列表 (List)、元组 (Tuple),甚至其他的 NumPy 数组等数据结构直接传递给 `np.array()` 来创建新的 NumPy 数组。

一、简单赋值创建

import numpy as np
a = np.array([2,4,6,8,10,12]) # 创建一个一维数组
b = np.array([[2,4,6],[8,10,12]]) # 创建一个二维数组
print(a)
print(b)# ------ 以下是结果 -------
[ 2  4  6  8 10 12]
[[ 2  4  6][ 8 10 12]]

最重要的是数组的形状要搞清楚

a.shape # 结果是(6,),1个数字表示1维
b.shape # 结果是(2, 3),2个数字表示2维

区分一下一维数组(6,)和二维数组(1,6)、(6,1)

# 一维数组 (6,)
a = np.array([1,2,3,4,5,6]) 
# 二维数组 (1,6) 
b = np.array([[1,2,3,4,5,6]])
# 二维数组 (6,1)
c = np.array([[1],[2],[3],[4],[5],[6]])

二、全零数组、全一数组、顺序数组

zeros = np.zeros((2, 3)) # 创建一个2行3列的全零矩阵
zeros
# -------- 以下是输出结果 --------
array([[0., 0., 0.],[0., 0., 0.]])ones = np.ones((3,))  # 创建一个形状为(3,)的全1数组
ones
# -------- 以下是输出结果 --------
array([1., 1., 1.])arange = np.arange(1, 10) # 创建一个从1到10的数组
arange
# -------- 以下是输出结果 --------
array([1, 2, 3, 4, 5, 6, 7, 8, 9])

1. 是浮点数(float)的简写形式等价于 1.0,表示这是一个浮点数而非整数,NumPy的 ones()/zeros() 等函数默认会创建浮点型数组,这是科学计算的常见需求;arange()默认创建整数型数组,设计用于生成序列,常用于索引等整数场景,np.arange() 只能直接创建一维数组,但通过reshape等后续操作可自由转换维度,常用于创建二维数组和三维数组

arr3d = np.arange(3 * 4 * 5).reshape((3, 4, 5))
# 生成从0-59的连续一维数组,再重塑为3×4×5的三维数组(层数, 行数, 列数)# ---------- 以下为结果 -----------
array([# 第0层 (shape: 4x5)[[ 0,  1,  2,  3,  4],[ 5,  6,  7,  8,  9],[10, 11, 12, 13, 14],[15, 16, 17, 18, 19]],# 第1层 [[20, 21, 22, 23, 24],[25, 26, 27, 28, 29],[30, 31, 32, 33, 34],[35, 36, 37, 38, 39]],# 第2层[[40, 41, 42, 43, 44],[45, 46, 47, 48, 49],[50, 51, 52, 53, 54],[55, 56, 57, 58, 59]]
])

三、随机创建数组

1. 在后续深度学习中,我们经常需要对数据进行随机化处理,以确保模型的泛化能力。

2. 为了测试很多函数的性能,往往需要随机化生成很多数据。

- 记忆技巧:

1. 看结尾:

   - "int" → 整数

   - "n" → 正态(normal)

2. 看前缀:

   - 纯"random" → Python基础随机

   - "np.random" → NumPy增强版

3. 功能差异:

   - `rand()`和`random()`都是均匀分布,但`rand()`能直接生成数组

   - `randn()`生成的数据会有正有负,其他方法都是非负数

来应用一下:

import numpy as np
np.random.seed(42)  # 设置随机种子以确保结果可重复# 生成10个语文成绩(正态分布,均值75,标准差10)
chinese_scores = np.random.normal(75, 10, 10).round(1)
# 第一个参数75为均值。第二个参数10为标准差,第三个参数10为数组大小
# .normal() 生成原始随机数(可能含多位小数)   .round(1) 将结果四舍五入保留1位小数# 找出最高分和最低分及其索引
max_score = np.max(chinese_scores)
max_index = np.argmax(chinese_scores)
min_score = np.min(chinese_scores)
min_index = np.argmin(chinese_scores)print(f"所有成绩: {chinese_scores}")
print(f"最高分: {max_score} (第{max_index}个学生)")
print(f"最低分: {min_score} (第{min_index}个学生)")# ---------- 以下为结果 ----------
所有成绩: [80.  73.6 81.5 90.2 72.7 72.7 90.8 82.7 70.3 80.4]
最高分: 90.8 (第6个学生)
最低分: 70.3 (第8个学生)

四、数组的运算

很简单,全部参考线代的矩阵计算规则即可,但注意直接用' * '、' / '符号进行的是逐元素乘除法,矩阵乘法是' @ '运算符,矩阵除法要先求逆再矩阵乘法,就是注意一下 NumPy 的 * 相当于MATLAB的 .*,而 @ 相当于MATLAB的 *

五、数组的索引

1.一维数组

对于一维数组取一个元素的索引来说,跟列表差不多

整数数组进行索引一次性取多个元素:语法是 arr1d[[index1, index2, ...]]

arr1d[[3, 5, 8]] # 取出数组中索引为 3, 5, 8 的元素

切片进行索引一次性取多个元素:语法是 arr1d[start : stop],假如步长想要自己设置

arr1d[start : stop : step]

arr1d[2:6] # 取出索引为2到5的元素(不包括索引6的元素,取左不取右)arr1d[:5] # 取出数组中从头到索引 5 (不包含 5) 的元素arr1d[4:] # 取出数组中从索引 4 到结尾的元素arr1d[:] # 取出全部元素arr1d[::2] # 取出数组中所有偶数索引对应的元素 (即索引 0, 2, 4, 6, ...)

2.二维数组

索引顺序:在二维数组 arr2d 里,第一个索引值代表行,第二个索引值代表列。比如 arr2d[i , j] ,i 是行索引,j 是列索引

arr2d[1, :] # 取出第 2 行 (索引为 1) 的所有元素,也可以省略后面的:成arr2d[1]arr2d[:, 2] # 取出第 3 列 (索引为 2) 的所有元素arr2d[[0, 2], :] # 使用整数数组作为行索引,取出由第 1 行和第 3 行的元素arr2d[:, [1, 3]] # 使用整数数组作为列索引,取出由第 2 列和第 4 列的元素arr2d[1:3, 1:3] # 使用切片作为索引,取出一个 2x2 的子矩阵

3.三维数组

和二维数组的索引差不多

arr3d = np.arange(3 * 4 * 5).reshape((3, 4, 5))
# 生成从0-59的连续一维数组,再重塑为3×4×5的三维数组(层数, 行数, 列数)# ---------- 以下为结果 -----------
array([# 第0层 (shape: 4x5)[[ 0,  1,  2,  3,  4],[ 5,  6,  7,  8,  9],[10, 11, 12, 13, 14],[15, 16, 17, 18, 19]],# 第1层 [[20, 21, 22, 23, 24],[25, 26, 27, 28, 29],[30, 31, 32, 33, 34],[35, 36, 37, 38, 39]],# 第2层[[40, 41, 42, 43, 44],[45, 46, 47, 48, 49],[50, 51, 52, 53, 54],[55, 56, 57, 58, 59]]
])arr3d[1, :, :] # 选择第二层
# --------- 以下为结果 -----------
array([[20, 21, 22, 23, 24],[25, 26, 27, 28, 29],[30, 31, 32, 33, 34],[35, 36, 37, 38, 39]])arr3d[1, 0:2, :]# 使用整数数组 [0, 2] 作为第一个维度 (层) 的索引
# --------- 以下为结果 -----------
array([[20, 21, 22, 23, 24],[25, 26, 27, 28, 29]])arr3d[1, 0:2, 2:4]
# --------- 以下为结果 -----------
array([[22, 23],[27, 28]])

收获心得:

学完了再调转回去看看shap库那一节的shap_values的索引,应该就能搞懂了

@浙大疏锦行

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

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

相关文章

ubuntu 20.04 更改国内镜像源-阿里源 确保可用

镜像源是跟linux版本一一对应的,查询自己系统的版本号: 命令:lsb_release -a macw:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal macw:~$…

基于OpenCV的SIFT特征和FLANN匹配器的指纹认证

文章目录 引言一、概述二、代码解析1. 图像显示函数2. 核心认证函数2.1 创建SIFT特征提取器2.2 检测关键点和计算描述符(源图像)2.3 检测关键点和计算描述符(模板图像)2.4 创建FLANN匹配器2.5 使用K近邻匹配 3. 匹配点筛选4. 认证…

四品种交易策略

策略概述 策略思路: 交易品种:同时交易四个品种,每个品种使用总资金的10%。 合约选择:使用连续合约(data0)发出交易信号,实际交易 主力合约(data1)和下一个主力合约(data2)。 资金管理:总资金用A_CurrentEquity表示,交易手数据此计算。 止损执行:盘中达到止损…

MySQL事务的一些奇奇怪怪知识

Gorm事务有error却不返回会发生什么 Gorm包是大家比较高频使用。正常的用法是,如果有失败返回error,整体rollback,如果不返回error则commit。下面是Transaction的源码: // Transaction start a transaction as a block, return …

时序数据库、实时数据库与实时数仓:如何为实时数据场景选择最佳解决方案?

随着物联网、金融交易、在线游戏等场景对实时数据处理需求的增长,市场上涌现出多种专门针对实时数据处理的数据库解决方案。然而,面对时序数据库、实时数据库和实时数据仓库这三种看似相似的技术,许多技术决策者常常感到困惑:它们…

Spring3+Vue3项目中的知识点——JWT

全称:JOSN Web Token 定义了一种简洁的、自包含的格式,用于通信双方以json数据格式的安全传输信息 组成: 第一部分:Header(头),记录令牌类型、签名算法等。 第二部分:Payload&am…

微服务架构详解

微服务架构详解:从概念到实践(附代码案例) 目录 微服务架构详解:从概念到实践(附代码案例) 一、微服务架构概述 1.1 什么是微服务? 1.2 微服务的核心思想 二、微服务架构的优势与挑战 2.1 优势 2.2 挑战 三、微服务架构的核心组件 3.1 服务注册与发现 示例代…

linux下编写shell脚本一键编译源码

0 前言 进行linux应用层编程时,经常会使用重复的命令对源码进行编译,然后把编译生成的可执行文件拷贝到工作目录,操作非常繁琐且容易出错。本文编写一个简单的shell脚本一键编译源码。 1 linux下编写shell脚本一键编译源码 shell脚本如下&…

学习!FastAPI

目录 FastAPI简介快速开始安装FastApiFastAPI CLI自动化文档 Reqeust路径参数Enum 类用于路径参数路径参数和数值校验 查询参数查询参数和字符串校验 请求体多个请求体参数嵌入单个请求体参数 CookieHeader表单文件直接使用请求 ResponseResponse Model多个关联模型 响应状态码…

DAY 4 缺失值的处理

\1. 打开数据 import pandas as pd data pd.read_csv(rdata.csv) data\2. 查看数据 # 打印数据集的基本信息(列名、非空值数量、数据类型等) print("data.info() - 数据集的基本信息(列名、非空值数量、数据类型等)&#…

Java面试实战:从Spring Boot到分布式缓存的深度探索

Java面试实战:从Spring Boot到分布式缓存的深度探索 场景介绍 在一家著名的互联网大厂,面试官老王正对求职者“水货程序员”明哥进行Java技术面试。明哥带着一点紧张和自信,迎接这场技术“拷问”。 第一轮:基础问题 老王&#…

UART、SPI、IIC复习总结

一、UART 1、UART和USART的异同? 相同点 基本功能:都是用于串行通信的数据收发设备,能够实现数据在不同设备之间的传输。在异步通信模式下,二者的工作方式相似,都使用起始位、数据位、校验位(可选&#…

PostGIS实现矢量数据转栅格数据【ST_AsRaster】

ST_AsRaster函数应用详解:将矢量数据转换为栅格数据 [文章目录] 一、函数概述 二、函数参数与分组说明 三、核心特性与注意事项 四、示例代码 五、应用场景 六、版本依赖 七、总结 一、函数概述 ST_AsRaster是PostGIS中用于将几何对象(如点、线…

Linux 线程(上)

前言:大家早上中午晚上好!!今天来学习一下linux系统下所谓的线程吧!!! 一、重新理解进程,什么是进程? 1.1 图解 其中黑色虚线部分一整块就是进程,注意:一整…

Java API学习笔记

一.类 1. String 类 不可变性:String对象创建后不可修改,每次操作返回新对象 String str "Hello"; str.length(); str.charAt(0); str.substring(1, 4); str.indexOf("l"); str.equals("hel…

医疗信息系统安全防护体系的深度构建与理论实践融合

一、医疗数据访问系统的安全挑战与理论基础 1.1 系统架构安全需求分析 在医疗信息系统中,基于身份标识的信息查询功能通常采用分层架构设计,包括表现层、应用层和数据层。根据ISO/IEC 27001信息安全管理体系要求,此类系统需满足数据保密性…

5.18本日总结

一、英语 复习list3list28 二、数学 学习14讲部分内容,1000题13讲部分 三、408 学习计网5.3剩余内容 四、总结 计网TCP内容比较重要,连接过程等要时常复习;高数学到二重积分对定积分的计算相关方法有所遗忘,需要加强巩固。…

MATLAB2025新功能

截至2023年9月,MATLAB官方尚未公布2025版本的具体更新内容。根据历史更新规律和技术发展趋势,未来版本可能会在以下方面进行优化: AI与深度学习增强 可能新增自动化模型压缩工具强化生成式AI模型支持改进的ONNX格式转换接口 性能提升 矩阵运…

算法题(149):矩阵消除游戏

审题: 本题需要我们找到消除矩阵行与列后可以获得的最大权值 思路: 方法一:贪心二进制枚举 这里的矩阵消除时,行与列的消除会互相影响,所以如果我们先统计所有行和列的总和,然后选择消除最大的那一行/列&am…

Uniapp、Flutter 和 React Native 全面对比

文章目录 前言Uni-app、Flutter 和 React Native 跨平台框架对比报告1. 性能对比2. 跨平台能力3. 学习曲线4. 社区生态与第三方库5. 原生能力扩展6. UI 渲染能力7. 企业支持与典型使用场景8. 开发效率与工具链 前言 将对 Uniapp、Flutter 和 React Native 进行全面对比&#x…