Python专项进阶——初步认识Numpy库

news2024/12/30 2:05:41

NumPy是Numeric Python的缩写,一个优秀的开源科学计算库。

个人理解,NumPy是一个主要围绕着数值数组对象(ndarray)(或叫做矩阵)进行各种操作的对象、函数集合。提供很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等。

Numpy主要用于数据分析、科学计算、深度学习、人工智能等领域,学习的难度很大一部分理解这些领域中的概念。

NumPy的主要对象是同构多维数组。它是一个元素表(通常是数字),所有类型都相同,由非负整数元组索引。在NumPy中维度称为轴。NumPy包的核心是ndarray对象。这是封装了同质数据类型的n维数组。

这里要熟悉几个数学上的名词:
标量、向量、矩阵、张量和转置
标量(scalar):标量就是一个单独的数,例如数字1、2、1.1、1.2都是标量;
向量(vector):一个向量可以看作是一组标量形成的一维数组,例如由 n 个实数组成的向量 x 为:
    x = [x 1 , x 2 , … , x n] 
    可以把向量看作空间中的点,向量中的每个元素是不同坐标轴上的坐标。
矩阵(matrix):矩阵是一个二维数组,其中的每一个元素被两个索引(行和列)所确定。矩阵A的例子如下所示

张量(tensor):张量是多维数组。零维数组就是标量,一维数组就是向量,二维数组就是矩阵,多维数组就是张量。
转置(transpose):矩阵的转置可以看作是将矩阵按主对角线翻转过来(也就是行变列,列变行),矩阵 A  的转置常用 来表示。主对角线是指从左上角到右下角的那条对角线。

NumPy的主要对象是同构多维数组,那就涉及到如何构建对象,如生成向量(一维数组)、矩阵(二维数组),张量(三维及以上数组),以及对这些数组的操作。

数据的维度: 一组数据的组织形式

一维数据:由对等关系的有序或无序数据构成,采用线性方式组织。对应列表、数组和集合等概念。
    列表和数组:一组数据的有序结构。二者的区别:
      列表:数据类型可以不同,即列表中元素的类型可以不同。
      数组:数据类型相同,即数组中元素的类型相同。
二维数据:由多个一维数据构成,是一维数据的组合形式。
    表格是典型的二维数据。其中,表头是二维数据的一部分。
多维数据:由一维或二维数据在新维度上扩展形成。
高维数据:仅利用最基本的二元关系展示数据间的复杂结构。如Python中的字典dict,JSON、XML等半结构化数据文件。

数据维度的Python表示:数据维度是数据的组织形式
  一维数据:列表和集合类型,list、tuple、set:list=[1,2,3]
  二维数据:列表类型:list = [ [1,2],[3,4],[5,6]]
  多维数据:列表类型:list = [ [ [1,2],[3,4]],[ [5,6],[7,8] ] ]
  高维数据:字典类型 或数据表示格式JSON、XML和YAML

NumPy的数组对象:ndarray——N维数组对象
Python已有列表类型,为什么需要一个数组对象(类型)?
 • 数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据
 • 设置专门的数组对象,经过优化,可以提升这类应用的运算速度
    观察: 科学计算中,一个维度所有数据的类型往往相同
 • 数组对象采用相同的数据类型,有助于节省运算和存储空间

ndarray是一个多维数组对象,由两部分构成:
  • 实际的数据
  • 描述这些数据的元数据(数据维度、数据类型等)
ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始。

在NumPy中,生成ndarray实例使用array方法,即ndarray在程序中的别名是array:

轴(axis): 保存数据的维度;秩(rank):轴的数量。

在NumPy中,维度称为轴。轴的数目(也即维度的数目)为rank,秩。

这里的概念很不好理解,我的简单理解就是所谓的秩,就是中括号嵌套的深度,如[ 1 2 3 ],一维数组,中括号只有一层,秩就是1,而8是单个数字,秩就是0,没有中括号,[ [1 2] [3 4]],中括号嵌套了2层,秩就是2。维度,或者说轴,用axis表示,秩是2,表示是二维的,或两个轴,轴号就是0和1,轴号从0开始,到秩-1。0轴是最外层的中括号,以次向内。

假设这个数组变量为p,那么p.sum()=276,就是所有元素相加的和,即0+1+2+...+23=276
p.sum(axis=0),就是把红线的相加,最后剩下蓝线和黑线结构,即结果是二维数组(2,3)

p.sum(axis=1),就是把蓝线相加,最后剩下红线和黑线结构,结果是二维数组(4,3):

p.sum(axis=2),就是把黑线相加,最后剩下红线和蓝线,结果是二维数组(4,2):

ndarray对象的属性
.ndim:秩,即轴的数量或维度的数量
.shape:ndarray对象的尺度,对于矩阵, n行m列
.size :ndarray对象元素的个数,相当于.shape中n*m的值
.dtype :ndarray对象的元素类型
.itemsize: ndarray对象中每个元素的大小,以字节为单位

p = [[[0,1,2],[3,4,5]],[[6,7,8],[9,10,11]],[[12,13,14],[15,16,17]],[[18,19,20],[21,22,23]],]
nump = np.array(p)
print(nump)
print(nump.sum())
print(nump.sum(axis=0))
print(nump.sum(axis=1))
print(nump.sum(axis=2))
print("ndim: ",nump.ndim)
print("shape: ",nump.shape)
print("size : ",nump.size)
print("dtype: ",nump.dtype)
print("itemsize: ",nump.itemsize)

运行的结果:

ndarray数组的创建
• 从Python中的列表、元组等类型创建ndarray数组
• 使用NumPy中函数创建ndarray数组,如: arange, ones, zeros等

从Python中的列表、元组等创建:np.array([1,2,3],dtype=np.float32)
当np.array()不指定dtype时, NumPy将根据数据情况关联一个dtype类型
使用NumPy中函数创建ndarray数组:主要函数有
arange(n)、ones(shape)、zeros(shape)、full(shape,val)、eye(n)

array(n),产生从0开始,步长为1,到n-1的一维数组,array(start,stop,step)定制产生一维数组。

ones_like(a)、zeros_like(a)、full_like(a,val)

linespace()、concatenate()

ndarray数组的变换
对于创建后的ndarray数组,可以对其进行维度变换和元素类型变换
ndarray数组的维度变换:

ndarray数组的类型变换:
new_a = a.astype(new_type)
astype()方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致
ndarray数组向列表的转换:
ls = a.tolist()

ndarray数组的操作
 数组的索引和切片,与python中列表的操作类同。
索引:获取数组中特定位置元素的过程
切片:获取数组元素子集的过程

ndarray数组的运算
数组与标量之间的运算:
数组与标量之间的运算作用于数组的每一个元素。
NumPy一元函数:对ndarray中的数据执行元素级运算的函数

NumPy二元函数:

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

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

相关文章

【大数据】Hadoop里的“MySQL”——Hive,干货满满

【大数据】Hadoop里的“MySQL”——Hive,干货满满 文章脉络 Hive架构 HQL 表类型 创建表语法 分区 数据导入导出 函数 内置函数 UDF Java Python 在阅读本文前,请确保已经对Hadoop的三大组件(HDFS、MapReduce、YARN)有…

启动动效流程梳理(一)

因为项目涉及一些启动相关的方案,以及平常处理问题的时候会遇到很多启动响应的问题,所以对启动动效的拉起流程进行一个全面的梳理,同时也借此即会对U版本的动效流程做一个初步的了解吧。 startActivityUnchecked: 启动的流程就先不…

Windows10 如何配置python IDE

Windows10 如何配置python IDE 前言Python直接安装(快速上手)Step1.找到网址Step2.选择版本(非常重要)Step3. 安装过程Step4. python测试 Anaconda安装(推荐)Step1. 找到网址Step2. 下载anacondaStep3. 安装…

动手学深度学习(pytorch)学习记录25-汇聚层(池化层)[学习记录]

目录 汇聚层(池化层):填充和步幅多通道 汇聚层(池化层): 降低卷积层对位置的敏感性,同时降低对空间降采样表示的敏感性。 汇聚层和卷积层的运动方式一样,从左上角向右下角移动指定步幅,汇聚层执行的是“采样”操作。…

【观察】联想数据网络产品线全新升级,构建高质量的AI网络底座

毫无疑问,数字经济时代,算力已成为推动千行百业数字化转型,赋能经济蓬勃发展的重要引擎,同时也成为衡量国家综合实力的重要指标之一。特别是随着以ChatGPT、GPT4为代表的AI大模型的发布,不仅对数据中心基础设施提出了巨…

ZBrush与Blender雕刻功能哪个更好些?

选择正确的3D软件首先会让你的创作过程更加轻松,尤其是在动画或大片电影制作方面。不同的软件提供不同的功能,并倾向于专注于特定领域,如绘画、动画或雕刻。如果你选择了适合你风格和目标的软件,你可以创作出极具创意的作品。 在…

数据结构:浅谈树的遍历方式

遍历的含义就是把树的所有节点(Node)按照某种顺序访问一遍。包括前序,中序,后续,广度优先(队列),深度优先(栈)5 种遍历方法。之所以叫前序、中序、后序遍历&a…

python 学习一张图

python学习一张图,python的特点的是学的快,一段时间不用,忘记的也快,弄一张图及一些入门案例吧。 写一个简单的测试: #!/usr/bin/python # -*- coding: UTF-8 -*- import osdef add_num(a, b):return a bif __name__…

【AIGC】探索超凡记忆:SuperMemory,你的私人智能书签助手!

🧠 构建你的第二大脑:SuperMemory 在这个信息爆炸的时代,我们每天都在互联网上浏览和保存大量的信息,但往往这些宝贵的数据就像被扔进了黑洞,再也没有被回顾和利用。 SuperMemory 开源项目应运而生,旨在解…

深度学习基础案例4--运用动态学习率构建CNN卷积神经网络实现的运动鞋识别(测试集的准确率84%)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 前几天一直很忙,一直在数学建模中,没有来得及更新,接下来将恢复正常这一次的案例很有意思:在学习动态调整…

Nexus基本介绍

Nexus是Sonatype公司发布的一款强大的仓库(Repository)管理软件,常被用来搭建Maven私服,因此也被称为“Maven仓库管理器”。 Nexus 的Web界面: Nexus的主要功能与优势 仓库管理: Nexus支持多种仓库类型…

初识Verilog HDL其一

VerilogHDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 1.1 Verilog基础语法 1.11 逻辑值 0: 逻辑低电平,条件为假&am…

【信号发生器】连续模式和扫描模式下,示波器呈现出来的波形有何区别

信号发生器在“连续模式”和“扫描模式”下输出的波形在示波器中呈现出的波形形状有显著不同,这与它们各自的工作方式密切相关。 1、连续模式(Continuous Mode) ①工作方式:信号发生器在连续模式下输出固定频率、固定幅度的信号…

[AHK]编写Dialog类代替内置的InputBox命令

更灵活的自定义的Dialog类,可以用来平替内置的InputBox命令 AHK v1代码 #requires Autohotkey v1.0 answer : Dialog("输出结果:", "good") MsgBox, % "you answered: " answer ExitAppDialog(Question, DefaultValue :…

Java面试篇基础部分-垃圾回收算法

大厂面试垃圾回收算法详解内容。 JVM内存垃圾对象的确定? Java开发过程中,使用引用计数和可达性分析。来确定一个对象是否是需要被回收的对象,如果是需要被回收的对象则,对其进行垃圾回收,如果不是则说明是存在引用的对象,则不能清理 首先来分析一下引用算法,如果这个时…

web防火墙技术措施有哪些?防火墙主要类型有哪些

网络安全已经成为了一个不可忽视的重要议题。web防火墙是入侵检测系统,入侵防御系统的一种。web防火墙技术措施有哪些?Web应用防火墙,正是守护网络安全的一道坚实屏障。今天就跟着小编一起了解下关于web防火墙。 web防火墙技术措施有哪些&…

[C高手编程] const, volatile, register, inline: 修饰符与关键字全面解析

💖💖⚡️⚡️专栏:C高手编程-面试宝典/技术手册/高手进阶⚡️⚡️💖💖 「C高手编程」专栏融合了作者十多年的C语言开发经验,汇集了从基础到进阶的关键知识点,是不可多得的知识宝典。如果你是即将…

内存管控:内存池篇

目录 1.内存池的工作原理 2.内存池的优势 3.长时间运行的应用和内存碎片 4.代码实践 4.1核心结构(内存池结构) 4.2核心函数 4.2.1创建内存池 4.2.2销毁内存池 4.2.3分配内存块 4.2.4归还内存块入池 内存池(Memory Pool&#xff09…

CMake导入OpenCV检测人脸

基于级联分类器的人脸检测示例"face_detection.cpp"&#xff1a; #include <opencv2/opencv.hpp>int main(int argc,char *argv[]) {// load face classifiercv::CascadeClassifier faceCascade;faceCascade.load(argv[3]);cv::Mat image cv::imread(argv[1]…

Effective Java 学习笔记--42-44 函数接口及其应用(Lambda与方法引用)

目录 函数接口 标准函数接口 自定义函数接口 函数接口的应用 Lambda表达式 Lambda表达式相比于匿名类的优点 方法引用 函数式接口是只包含了一个抽象方法的接口&#xff0c;这种接口的设计目的是为了支持Lambda表达式为代表的函数输入&#xff0c;在Java中有43个标准的默…