python(6)numpy的使用详细讲解

在numpy中,最基本的数据结构是数组,因此我们首先需要了解如何创建一个数组。numpy提供了多种数组创建方法,包括从列表或元组创建、从文件中读取数据、使用特定函数创建等。下面是一些常用的创建方法:

一、创建数组

1. 从列表或元组创建

使用numpy.array()函数可以从列表或元组创建一个数组,例如:

import numpy as np

a = np.array([1, 2, 3])

b = np.array((4, 5, 6))

print(a) # [1 2 3]

print(b) # [4 5 6]

2. 从文件中读取数据

当我们需要从文件中读取数据时,可以使用numpy.loadtxt()函数,例如:

import numpy as np

data = np.loadtxt('data.txt')

print(data)

其中data.txt是一个包含数据的文本文件,loadtxt()函数会自动将其读取为一个numpy数组。

3. 使用特定函数创建

numpy提供了多种特定的函数来创建数组,例如:

import numpy as np

a = np.zeros((3, 4)) # 创建一个3行4列的全0数组

b = np.ones((2, 3)) # 创建一个2行3列的全1数组

c = np.random.rand(2, 4) # 创建一个2行4列的随机数数组

print(a)

print(b)

print(c)

 

二、数组的算术运算

让我们创建两个NumPy数组,分别称作data和ones:

NumPy使用图解教程「建议收藏」

若要计算两个数组的加法,只需简单地敲入data + ones,就可以实现对应位置上的数据相加的操作(即每行数据进行相加),这种操作比循环读取数组的方法代码实现更加简洁。

NumPy使用图解教程「建议收藏」

当然,在此基础上举一反三,也可以实现减法、乘法和除法等操作:

NumPy使用图解教程「建议收藏」

许多情况下,我们希望进行数组和单个数值的操作(也称作向量和标量之间的操作)。比如:如果数组表示的是以英里为单位的距离,我们的目标是将其转换为公里数。可以简单的写作data * 1.6:

NumPy使用图解教程「建议收藏」

NumPy通过数组广播(broadcasting)知道这种操作需要和数组的每个元素相乘。

三、数组的切片操作

我们可以像python列表操作那样对NumPy数组进行索引和切片,如下图所示:

NumPy使用图解教程「建议收藏」

四、聚合函数

NumPy为我们带来的便利还有聚合函数,聚合函数可以将数据进行压缩,统计数组中的一些特征值:

NumPy使用图解教程「建议收藏」

除了min,max和sum等函数,还有mean(均值),prod(数据乘法)计算所有元素的乘积,std(标准差),等等。上面的所有例子都在一个维度上处理向量。除此之外,NumPy之美的一个关键之处是它能够将之前所看到的所有函数应用到任意维度上。

五、NumPy中的矩阵操作

创建矩阵

我们可以通过将二维列表传给Numpy来创建矩阵。

np.array([[1,2],[3,4]])

NumPy使用图解教程「建议收藏」

除此外,也可以使用上文提到的ones()、zeros()和random.random()来创建矩阵,只需传入一个元组来描述矩阵的维度:

NumPy使用图解教程「建议收藏」

六、矩阵的算术运算

对于大小相同的两个矩阵,我们可以使用算术运算符(+-*/)将其相加或者相乘。NumPy对这类运算采用对应位置(position-wise)操作处理:

NumPy使用图解教程「建议收藏」

对于不同大小的矩阵,只有两个矩阵的维度同为1时(例如矩阵只有一列或一行),我们才能进行这些算术运算,在这种情况下,NumPy使用广播规则(broadcast)进行操作处理:

NumPy使用图解教程「建议收藏」

与算术运算有很大区别是使用点积的矩阵乘法。NumPy提供了dot()方法,可用于矩阵之间进行点积运算:

NumPy使用图解教程「建议收藏」

上图的底部添加了矩阵尺寸,以强调运算的两个矩阵在列和行必须相等。可以将此操作图解为如下所示:

NumPy使用图解教程「建议收藏」

七、矩阵的切片和聚合

索引和切片功能在操作矩阵时变得更加有用。可以在不同维度上使用索引操作来对数据进行切片。

NumPy使用图解教程「建议收藏」

我们可以像聚合向量一样聚合矩阵:

NumPy使用图解教程「建议收藏」

不仅可以聚合矩阵中的所有值,还可以使用axis参数指定行和列的聚合:

NumPy使用图解教程「建议收藏」

八、矩阵的转置和重构

处理矩阵时经常需要对矩阵进行转置操作,常见的情况如计算两个矩阵的点积。NumPy数组的属性T可用于获取矩阵的转置。

NumPy使用图解教程「建议收藏」

在较为复杂的用例中,你可能会发现自己需要改变某个矩阵的维度。这在机器学习应用中很常见,例如模型的输入矩阵形状与数据集不同,可以使用NumPy的reshape()方法。只需将矩阵所需的新维度传入即可。也可以传入-1,NumPy可以根据你的矩阵推断出正确的维度:

NumPy使用图解教程「建议收藏」

上文中的所有功能都适用于多维数据,其中心数据结构称为ndarray(N维数组)。

NumPy使用图解教程「建议收藏」

很多时候,改变维度只需在NumPy函数的参数中添加一个逗号,如下图所示:

NumPy使用图解教程「建议收藏」

九、NumPy中的公式应用示例

NumPy的关键用例是实现适用于矩阵和向量的数学公式。这也Python中常用NumPy的原因。例如,均方误差是监督机器学习模型处理回归问题的核心:

NumPy使用图解教程「建议收藏」

在NumPy中可以很容易地实现均方误差:

NumPy使用图解教程「建议收藏」

这样做的好处是,numpy无需考虑predictions与labels具体包含的值。文摘菌将通过一个示例来逐步执行上面代码行中的四个操作:

NumPy使用图解教程「建议收藏」

预测(predictions)和标签(labels)向量都包含三个值。这意味着n的值为3。在我们执行减法后,我们最终得到如下值:

NumPy使用图解教程「建议收藏」

然后我们可以计算向量中各值的平方:

NumPy使用图解教程「建议收藏」

现在我们对这些值求和:

NumPy使用图解教程「建议收藏」

最终得到该预测的误差值和模型质量分数。

十、用NumPy表示日常数据

日常接触到的数据类型,如电子表格,图像,音频……等,如何表示呢?Numpy可以解决这个问题。

1、表和电子表格

电子表格或数据表都是二维矩阵。电子表格中的每个工作表都可以是自己的变量。python中类似的结构是pandas数据帧(dataframe),它实际上使用NumPy来构建的。

NumPy使用图解教程「建议收藏」

2、音频和时间序列

音频文件是一维样本数组。每个样本都是代表一小段音频信号的数字。CD质量的音频每秒可能有44,100个采样样本,每个样本是一个-65535到65536之间的整数。这意味着如果你有一个10秒的CD质量的WAVE文件,你可以将它加载到长度为10 * 44,100 = 441,000个样本的NumPy数组中。想要提取音频的第一秒?只需将文件加载到我们称之为audio的NumPy数组中,然后截取audio[:44100]。

以下是一段音频文件:

NumPy使用图解教程「建议收藏」

时间序列数据也是如此(例如,股票价格随时间变化的序列)。

3、图像

图像是大小为(高度×宽度)的像素矩阵。如果图像是黑白图像(也称为灰度图像),则每个像素可以由单个数字表示(通常在0(黑色)和255(白色)之间)。如果对图像做处理,裁剪图像的左上角10 x 10大小的一块像素区域,用NumPy中的image[:10,:10]就可以实现。

这是一个图像文件的片段:

NumPy使用图解教程「建议收藏」

如果图像是彩色的,则每个像素由三个数字表示 :红色,绿色和蓝色。在这种情况下,我们需要第三维(因为每个单元格只能包含一个数字)。因此彩色图像由尺寸为(高x宽x 3)的ndarray表示。

NumPy使用图解教程「建议收藏」

4、语言

如果我们处理文本,情况就会有所不同。用数字表示文本需要两个步骤,构建词汇表(模型知道的所有唯一单词的清单)和嵌入(embedding)。让我们看看用数字表示这个(翻译的)古语引用的步骤:“Have the bards who preceded me left any theme unsung?”

模型需要先训练大量文本才能用数字表示这位战场诗人的诗句。我们可以让模型处理一个小数据集,并使用这个数据集来构建一个词汇表(71,290个单词):

NumPy使用图解教程「建议收藏」

然后可以将句子划分成一系列“词”token(基于通用规则的单词或单词部分):

NumPy使用图解教程「建议收藏」

然后我们用词汇表中的id替换每个单词:

NumPy使用图解教程「建议收藏」

这些ID仍然不能为模型提供有价值的信息。因此,在将一系列单词送入模型之前,需要使用嵌入(embedding)来替换token/单词(在本例子中使用50维度的word2vec嵌入):

NumPy使用图解教程「建议收藏」

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CesiumJS【Basic】- #037 绘制轮廓线(Entity方式)

文章目录 绘制轮廓线(Entity方式)1 目标2 代码2.1 main.ts绘制轮廓线(Entity方式) 1 目标 使用Entity方式绘制轮廓线 2 代码 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium.Viewer(<

10月开始,所有新来日本的外国人都必须加入公共年金体系!

为了吸引更多外国人来日本工作并为他们提供更好的养老保障&#xff0c;日本厚生劳动省最近宣布了一项新政策。 从今年10月开始&#xff0c;所有新来日本的外国人都必须加入公共年金体系。 虽然之前已经有这个要求&#xff0c;但还是有不少人没加入。 因此&#xff0c;日本年金机…

Excel保存时弹出“请注意,您的文档的部分内容可能包含文档检查器无法删除的个人信息”

前言 Excel保存时弹出“请注意&#xff0c;您的文档的部分内容可能包含文档检查器无法删除的个人信息”&#xff0c;本节会介绍如何查看无法删除的个人信息是什么&#xff0c;以及如何关闭该提示窗口 一、关闭弹窗提醒 1、点击文件 – 选项 2、点击选择信任中心 – 信任中心…

烟台网站建设前需要了解哪些

在进行烟台网站建设之前&#xff0c;需要了解以下几个重要的方面&#xff1a; 1. 目标和定位&#xff1a;在建设网站之前&#xff0c;需要明确网站的目标和定位。是为了展示公司业务&#xff0c;还是为了销售产品&#xff0c;或者是为了提供信息和服务等。根据不同的目标和定位…

Soul打造安全社交元宇宙环境,全力守护用户线上社交安全

在数字化时代的浪潮中,智能安全线上社交正成为人们日常生活中的重要组成部分。随着人们对社交媒体和在线平台依赖程度的不断增加,保障个人信息安全和网络安全变得至关重要。在此背景下,社交平台致力于采取多种措施来保障用户的隐私安全,提升社交体验的质量和安全性。而Soul全方…

程序员日志之DNF手游55级版本全职业攻略

目录 传送门正文日志1、概要2、异界套和遗迹悲鸣套坑3、全职业攻略鬼剑士-狂战士鬼剑士-鬼泣鬼剑士-剑魂鬼剑士-阿修罗格斗家-散打格斗家-气功师神枪手-漫游枪手神枪手-枪炮师魔法师-元素师魔法师-魔道学者圣职者-圣骑士 传送门 SpringMVC的源码解析&#xff08;精品&#xff…

黄子韬徐艺洋领证传闻引热议

黄子韬徐艺洋领证传闻引热议&#xff0c;经纪人火速辟谣&#xff1a;谣言止于智者7月1日&#xff0c;娱乐圈再度掀起一阵波澜&#xff0c;一则关于黄子韬与徐艺洋疑似领证的传闻迅速席卷网络&#xff0c;引发了无数粉丝和网友的关注和讨论。然而&#xff0c;在短短几个小时内&a…

Python从0到100(三十四):Python中的urllib模块使用指南

1. urllib模块概述 在Python中&#xff0c;除了广泛使用的requests模块之外&#xff0c;urllib模块也是处理HTTP请求的重要工具。urllib模块在Python 2中分为urllib和urllib2两个模块&#xff0c;而在Python 3中&#xff0c;它们被合并为一个urllib模块。本文将重点介绍Python…

数据恢复:移动硬盘数据恢复全攻略

一、移动硬盘数据恢复概述 在数字化时代&#xff0c;数据已成为我们生活中不可或缺的一部分。移动硬盘作为便携式存储设备&#xff0c;因其大容量、高便携性和稳定性而广受欢迎。然而&#xff0c;在使用过程中&#xff0c;我们可能会遇到数据丢失的问题&#xff0c;这可能是由…

Python 算法交易实验75 QTV200后续想法梳理

说明 在第一步获取数据源&#xff0c;然后进入Mongo(第一个数据节点)开始&#xff0c;QTV200的数据流体系就开始动了。后续用多少时间完成不太好确定&#xff0c;短则数周&#xff0c;长则数月。毕竟有过第一版实验的基础&#xff0c;应该还是可以做到的。 下面就是天马行空&…

CentOS中使用SSH远程登录

CentOS中使用SSH远程登录 准备工作SSH概述SSH服务的安装与启动建立SSH连接SSH配置文件修改SSH默认端口SSH文件传输 准备工作 两台安装CentOS系统的虚拟机 客户机&#xff08;192.168.239.128&#xff09; 服务器&#xff08;192.168.239.129&#xff09; SSH概述 Secure S…

Python基础之多进程

文章目录 1 多进程1.1 简介1.2 Linux下多进程1.3 multiprocessing1.4 Pool1.5 进程间通信1.6 分布式进程 1 多进程 1.1 简介 要让Python程序实现多进程&#xff08;multiprocessing&#xff09;&#xff0c;我们先了解操作系统的相关知识。 Unix/Linux操作系统提供了一个fork…

如何在本地一键配置最强国产大模型

自从OpenAI的ChatGPT横空出世以来&#xff0c;国内外各类大语言模型&#xff08;LLM&#xff09;层出不穷&#xff0c;其中不乏Google的Gemini、Claude、文心一言等等。相较于竞争激烈的商业模型赛道&#xff0c;以Llama为代表的开源大模型的进步速度也十分惊人。 伴随着大语言…

ANSYS新能源汽车动力电池仿真应用案例

燃料电池是一种非燃烧过程的电化学能转换装置&#xff0c;将氢气&#xff08;等燃料&#xff09;和氧气的化学能连续不断地转换为电能&#xff0c;是发电设备而非储能设备。 根据电解质的不同&#xff0c;分为碱性燃料电池AFC、磷酸燃料电池PAFC、熔融碳酸盐燃料电池MCFC、固体…

微机原理 复习

第一章导论 1.3 冯诺依曼体系结构 &#xff08;1&#xff09;以二进制形式表示指令和数据 &#xff08;2&#xff09;程序和数据事先放在存储器中&#xff08;预存储&#xff09; &#xff08;3&#xff09;由运算器、控制器、输入设备和输出设备五大部件组成 字长、主频…

css实现一个三角形

实现不用方向的三角形可根据border进行设置。具体代码如下&#xff1a; .triangle-up {width: 0;height: 0;border-top: 10px solid transparent;border-left: 10px solid transparent;border-right: 10px solid transparent;border-bottom: 10px solid black;}.triangle-rig…

6-14题连接 - 高频 SQL 50 题基础版

目录 1. 相关知识点2. 例子2.6. 使用唯一标识码替换员工ID2.7- 产品销售分析 I2.8 - 进店却未进行过交易的顾客2.9 - 上升的温度2.10 - 每台机器的进程平均运行时间2.11- 员工奖金2.12-学生们参加各科测试的次数2.13-至少有5名直接下属的经理2.14 - 确认率 1. 相关知识点 left …

Redis Cluster 模式 的具体实施细节是什么样的?

概述 参考&#xff1a;What are Redis Cluster and How to setup Redis Cluster locally ? | by Rajat Pachauri | Medium Redis Cluster 的工作原理是将数据分布在多个节点上&#xff0c;同时确保高可用性和容错能力。以下是 Redis Cluster 运行方式的简要概述&#xff1a; …

Vue 快速入门案例

步骤一&#xff1a;引入vue.js文件 添加<script>标签并标明路径 步骤二&#xff1a;定义Vue对象 el Vue接管区域 data 定义数据模型 步骤三&#xff1a;编写视图层的展示 v-model 绑定数据模型 {{要展示的数据模型}} 运行效果 总结 文本框里的值&a…

欢太主题商店 官方资源提取与应用第三方资源方法一览

前言叠甲&#xff1a;支持正版&#xff0c;尊重他人劳动成果&#xff0c;反对盗版提取&#xff0c;不要传播提取版&#xff0c;我本人也在支持正版&#xff0c;但是最近懒得用主题&#xff0c;用一段时间的默认吧&#xff0c;如有主题开发者不满&#xff0c;请联系删除 &#x…