NumPy 学习笔记(二):NDArray

2023-11-16

 

# 导入 NumPy, 开始学习 
import numpy as np

 

不用 Python 非好汉,不晓 NumPy 真遗憾

 

本专栏 将使用 图解 以及 脑图 的方法来记录我的《图解 NumPy 学习笔记》。

 

NumPy 是 Numerical Python 的简称,它是目前 Python 数值计算 中最为重要的基础包。

——《利用 Python 进行数据分析》


0 NDArray —— 多维数组对象

多维数组对象

NDArray( N-dimensional array )是学习 NumPy 的基础

  • 快速灵活 大数据集容器

  • 存储 变化 数据 的 主要工具

 

它有多快,它有多灵活?

且听我慢慢道来。


1 生成 NDArray

首先,我们可以使用 np.array() 直接创建数组:

 

也可使用以下的方法,我们只需将生成元素的数量传给它们:

 

你看这个数组,它又方又正,

我们需要一些属性去描述它。

 

这里有三个属性 np.ndim 、np.shape 和 np.dtype :

  • np.ndim :描述数组的 维度,dimension 维度

  • np.shape :表征数组每一维度的 数量

  • np.dtype :描述数组的 数据类型

 

我们以 np.zeros() 为例:

  • shape : 整数整数元组 ,例如 3 或 (2,3)

  • dtype : 默认为 np.float64

  • order : 默认 'C' ,行优先

 

np.shape 传递参数,我们就能创建 多维数组

 

 

标标题图解 np.shape题

这里补充一下, np.reshape() 的用法:

图解 np.reshape()标题

 

下面是常用的 数组生成函数

 

创建数组后,就可以开始以有趣的方式操作它们了。

 


1.2 NDArray 的数据类型

等等刹个车,

某些应用场景下,我们还需要考虑数组的 数据类型 :

  • np.dtype查看 数组 数据类型

  • np.astype()修改 数组 数据类型

下面是 常用 NumPy 数据类型

 

我们还可以将 数字字符串 转换为 数字

数字字符串 → 数字标题标题

好了,终于可以开始有趣的操作数组了。

 


1.3 NumPy 数组运算

讲重点了,

数组之所以 重要 是因为它允许你进行 批量操作 而无须任何 for 循环。

 

这种特性被称为 向量化

  • 任何在 两个等尺寸数组 之间的算术操作都应用了 逐元素操作 的方式

 

让我们创建两个 NumPy 数组来展示它们的用途:

 

向量化 加减乘除

 

 

当然也可以进行 标量 计算:

Python 的 for 循环 慢的可怕,用 向量化 计算可以快百倍

 


1.4 基础索引与切片

 

一维数组 索引与切片

 

二维数组 索引与切片题

值得强调的是 切片左闭右开,这是个坑,

里面躺在很多人,包括我。

 

这里有两个概念需要说明:

  • 副本拷贝,物理内存不在同一位置

  • 视图引用,物理内存在同一位置

 

显然 视图 节约内存空间

那什么时候是“副本”,什么时候是“视图”呢?

 

答:

Python 序列切片 属于 副本

Numpy np.array切片 属于 视图

 

如果想要一份 数组切片的拷贝 而不是视图的话,就必须 显式地复制 这个数组,例如 data[1:3].copy()

 


1.5 布尔索引

数组比较操作(比如 ==)也是可以 向量化 的,

我们先创建两个数组,

一个代表姓名(name),

一个代表对应的成绩(score):

 

进行 布尔索引

查看 Yellow 的成绩:

Yellow 不错呀

 

看看谁没有及格:

原来是 Wangcai 呀

 

这里需要强调的是 布尔索引 总是生成数据的 拷贝

 


1.6 神奇索引

神奇索引,一个 magical 的名字,

它是 Numpy 中的术语,用于描述使用 整数数组 进行数据索引。

标题

 

神奇索引的结果总是 一维 的。

 

神奇索引在赋值时,有妙用。

 

这里需要强调的是 神奇索引 也总是生成数据的 拷贝

 


1.7 数组转置和换轴

转置 np.T

 

换轴 np.transpose() :

  • 接受 包含轴编号 的 元组,用于 置换轴

二维数组 置换轴

标题

二维数组置换轴

看到这里,会想这个有什么用呢,不是 转置 吗?

 

如果有这个疑问,可以看看下面三维的使用。

 

三维数组 置换轴

可以看我下面这个回答,就对 三维数组 巧妙地使用了 np.transpose(),实现了 图像信号信道分离 、 信道重组

一副图像,是(3,566,800)这种形式,如何变成(566,800,3)这样形式?​

 


人生苦短,我用 Python ;

人生苦短,我用 NumPy。

 

下一期,我们将继续图解 NumPy 的 通用函数

 

以上就是 NumPy 多维数组 的基本操作了,其他内容会在后续的文章中继续讲解。

我也会在知乎上寻找问题,使用 NumPy 进行回答,以补充我的专栏文章。

谢谢您的观看,感谢您的收藏点赞,期待您的评论交流。

 

The End

Last updated: 2019/9/26


本文参考:

名称:A Visual Intro to NumPy and Data Representation 作者:Jay Alammar

名称:Python for Data Analysis 作者:Wes McKinney

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

NumPy 学习笔记(二):NDArray 的相关文章

随机推荐

  • IP地址学习总结

    IP地址 IP地址是局域网中某台主机的唯一标识 一段二进制编码 由32位组成 但是通常使用点分十进制来表示 便于记忆 x x x x 子网掩码 在同一局域网中 所有的IP必须在同一网段才能相互通信 而子网掩码用来标识是属于哪一个网段 确定I
  • uniapp - 实现微信小程序电子签名板,横屏手写姓名签名专用写字画板(详细运行示例,一键复制开箱即用)

    效果图 实现了在uniapp项目中 微信小程序平台流畅的写字签名板 也可以绘图 功能源码 复制粘贴 改改样式几分钟即可搞定 支持自动横屏 持预览 真机运行测试非常流畅不卡顿 基础模板 如下代码所示
  • Harbor镜像仓库搭建

    1 安装docker comprose docker comprose是docker容器批量管理工具 curl L https get daocloud io docker compose releases download 1 25 0
  • Unity3d 物体速度、运动的控制——Input.GetAxis、transform.Translate、transform.Rotate、AddForce

    首先介绍Input GetAxis方法 官方文档给出的解释为 Returns the value of the virtual axis identified by axisName 返回根据参数名所指定的虚拟轴上的数值 public st
  • 深入浅出AXI协议(6)——传输属性

    一 前言 在之前的文章中 我们介绍的主要内容是AXI协议的数据读写结构和读写响应结构 主要讲述了当遇到各种特殊情况时 AXI如何完成数据的读写操作 最后介绍了读写响应的4种类型 在本文中 我们将介绍AXI协议的传输属性 二 传输类型与属性
  • 性能测试流程

    参考书籍 软件测试 黑马程序员编著 性能测试与普通的功能测试目标不同 因此其测试流程与普通的测试流程也不相同 虽然性能测试也遵循测试需求分析 测试计划制订 测试用例设计 测试执行 编写测试报告的基本过程 但在实现细节上 性能测试有单独一套流
  • GDAL源码剖析(一)

    转载自 http blog csdn net liminlu0314 article details 6933772 前言 一直在使用和研究GDAL的相关东西 发现网上对GDAL的内容倒是不少 但是很少有系统的介绍说明 以及内部的一些结构说
  • Centos7 交叉编译boost_1_70_0源码 AArch架构

    环境准备 centos7 镜像 下载地址 http mirrors aliyun com centos 7 9 2009 isos x86 64 aarch64交叉编译链 下载地址 https releases linaro org com
  • JS 使用hash算法计算字符串的哈希值

  • DFS遍历框架解决岛屿问题

    补充在开头 这篇题解 是我在做leetcode无意中看到的 原po将此类问题解释的非常清晰 故将其转载并添加上对应题目的解题代码 仅用做个人的学习笔记 不做任何商业用途 引言 我们所熟悉的 DFS 深度优先搜索 问题通常是在树或者图结构上进
  • [UE4笔记] 3DUI空间交互

    在Actor中使用widget的时候制作3DUI 如果直接选择World模式 鼠标和UI是无法产生交互的 只要勾选了红框里的选项 就可以正常交互了 老是忘记 所以写个笔记记录一下 效果 注意 如果你还是点击不到 输入控制台命令showfla
  • 第十题

    第十题 限制元素 修改限制 把3改了即可
  • 【嵌入式基础】串口通信

    目录 1 前言 2 基本概念 2 1 波特率 2 2 起始位 2 3 数据位 2 4 校验位 2 5 停止位 2 6 空闲位 3 工作模式 3 1 单工模式 3 2 半双工模式 3 3 全双工模式 4 同步通信和异步通信 4 1 同步通信
  • 【Mac 教程系列第 18 篇】如何修改 iTerm2 的背景图片

    这是 Mac 教程系列第 18 篇 如果觉得有用的话 欢迎关注专栏 默认终端的效果图是这样的 修改后的效果如下图所示 如果你已经习惯了默认终端的样式 前期看有背景图片的可能会不太适应 不过有时候尝试一下不同的风格 也许会有不同的体验 如何实
  • YOLO5 目标检测

    目录 1项目的克隆和必要的环境依赖 1 1项目的克隆 1 2项目代码结构整体介绍 1 3环境的安装和依赖的安装 2 数据集和预训练权重的准备 2 1利用labelimg标注数据和数据的准备 2 2 获得预训练权重 3训练自己的模型 3 1修
  • TCP详解 (三)Nagle算法和延迟确认

    文章目录 延迟确认 Nagle算法 Nagle算法遇上延迟确认 关闭Nagle算法 一些有关TCP通信量的研究如 Caceresetal 1991 发现 如果按照分组数量计算 约有一半的TCP报文段包含成块数据 如 FTP 电子邮件和 Us
  • unitTest+Ddt数据驱动测试

    我们设计测试用例时 会出现测试步骤一样 只是其中的测试数据有变化的情况 比如测试登录时的账号密码 这个时候 如果我们依然使用一条case一个方法的话 会出现大量的代码冗余 而且效率也会大大降低 此时 ddt模块就能帮助我们解决这个问题 dd
  • 微信王者有ios的服务器吗,王者IOS微信区国服瑶多有钱?凌晨撒4W红包,点开头像傻眼...

    原标题 王者IOS微信区国服瑶多有钱 凌晨撒4W红包 点开头像傻眼 大家好 在王者荣耀这款游戏里面 有一个英雄的地位是非常特殊的 那就是被女玩家们所深爱着的瑶 但她又被男玩家所厌恶 毕竟女玩家和男玩家玩游戏的目的不一样 女玩家是为了快乐 她
  • 深度讲解一下远程控制软件哪家好?推荐一款免费不限速的好软件给大家!

    小编今天要推荐一款较为小众的远程控制软件 通过远程桌面可以极大地方便我们进行远程技术支持 远程办公 然而我们熟知 QQ 远程 windows自带的远程协助 使用起来并不理想 不是连接不顺畅就是操作技术高 相比之下 专门的远程桌面软件的体验更
  • NumPy 学习笔记(二):NDArray

    导入 NumPy 开始学习 import numpy as np 不用 Python 非好汉 不晓 NumPy 真遗憾 本专栏 将使用 图解 以及 脑图 的方法来记录我的 图解 NumPy 学习笔记 NumPy 是 Numerical Py