Python3.1-标准库之Numpy
2026/9/19 20:32:28 网站建设 项目流程

这一系列之中, 用于进行介绍的, 属于标准库的板块, 其对Numpy部分予以支持。资料源自, 那页面存在大量链接, 此处是直接翻译而来, 因而会致使无法进行链接。能够大致将该博文浏览完毕, 之后再去查看英文版。

1、先决条件

若要运行numpy, 首先最小需安装的有: NumPy。a、它是一个增强的交互式shell, 此对于探索numpy的特性而言是极为方便的;该交互式shell能让你进行plot图表;c、SciPy提供诸多工作于numpy顶端的科学示例。

2、基础知识

numpy的主要对象是那种同质多维数组, 就是说在一个元素(一般是数字)呈现的表里头, 元素的类型全都是一样的, 在这当中能够借助正整数的元组去对元素予以索引, 在numpy里数组的维度称作轴(axes), 轴的数量叫做秩(rank), 比如说, 处于3维空间内里一个点的坐标是秩为1的数组, 是因为它仅有一个轴, 这个轴的长度为3, 在下面的示例里, 数组的秩为2(由于是2维的啊), 第一个维度(轴)的大小是2, 第二个维度的大小是3。

numpy的数组类被称作, 别名为array, numpy.array跟标准库类中那个叫array.array的存在差异, 标准化库类里此版本只能处理一维数组且它携带的功能性也是不多的, 对象的关键的属性有:

.ndim, 它指的是数组所具有的轴也就是维度的个数, 其中, 维度的数量常常被称作rank。

数组的维度是.shape是, 用一个整数元组来表示, 该整数元组表示在每个维度上的尺寸大小, 对于一个有着n行m列的矩阵而言, 其shape就是(n, m), shape元组的长度也就是秩(或是维度的数量)ndim。

.size, 它指的是数组之中元素的总的个数, 而这个个数呢, 又等同于shape元素相互之间乘积所得到的结果。

.数据类型: 是用于描述数组当中元素类型所对应的对象。能够运用标准类型去创建或者指定该数据类型;又或者是在后续, 添加上numpy的类型。比如numpy.int32;numpy.int16;numpy.等等。

数组当中, 每一个元素的字节大小是这样的, 举例来说, 一个特定类型的元素组成的数组, 其字节大小为8, 这是通过64除以8得到的, 而另一种类型的数组, 其字节大小为4, 这是由32除以8得出的, 该属性等同于.dtype.。

这个缓冲区, 是包含数组实际元素的那个。在一般状况下, 我们是用不着它这个属性的。这是为何呢? 因为我们将会动用那般索引的办法, 去对数组里的元素予以访问。

1)例子

2)构建数组

有好些种类的办法用以构建数组, 举例来说, 能够借助一个常规的列表, 或者运用由array函数所生成的元组来进行构建, 能够经由调用那个生成之后的数组的属性dtype, 以此来知晓该数组的元素类型:

老是会犯的那种错误: 在进行array调用之际, 传递过去的是多个数值方面的参数, 并非运用单个的数字所构成的列表:

array能够把序列的序列转变为二维的数组, 序列的序列的序列会被转化成三维的数组, 诸如此类:

数组的类型同样可以在创建的时侯显式指定:

一般来讲, 数组之中元素的值于起始之际是未可知的, 然而数组的大小是可知的, 因此numpy给出几个函数于创建数组之际对元素的值予以占位, 如此便能规避后续需要对数组开展动态增长的操作(数组的动态增长的代价颇高)啦。函数zeros生成一个全都是0的数组, 函数ones生成一个全都是1的数组, 函数empty生成一个初始化内容为随机且依赖于内存状态的数组。默认情形下, 生成的数组的dtype是:

针对于生成数字序列这件事情, numpy拿出来了一个跟range差不离的函数, 此函数返回一个列表, 其参数是(起始, 结束, 步长), 就是这种情况:

对于传递过来的参数属于浮点数的情况, 鉴于浮点数这一数据类型所具备的精度存在着局限, 故而在通常状况下难以有那能够确保稳定的、关于元素数量方面的笃定保证。因此, 选用使方法(函数式)成为了更为适宜的抉择, 原因究竟为何呢? 原因即为我们可针对此方法(函数)指定明确的、所希望创建而成的元素数量, 其中所涉及的参数呈现为(起始数值, 终止数值, 元素数量)这般的形式:

此外还可见于, 诸多情况, 多种情形, 重重状况, 多样态势, 各类境遇, 纷繁局面, 不同形势。

3)打印数组

当处于需要对数组进行打印的情形时, numpy会借助类似列表嵌套的方式来将结果予以显示。在此之中的布局呈现为: a、于数组最后的维度也就是轴上, 元素朝着自左至右的方向进行打印, 例如如下情况, c的。

8 9 10 11

b、在其他的维度之上, 全部都是从顶部开始朝着下方进行打印的;在维度数量比较多的情况之下每一个分片相互之间凭借着一个空白的行将它们分隔开来, 一维数组依据行的方式进行打印, 二维按照矩阵的形式进行打印, 三维凭借矩阵的列表形式进行打印。

当一个数组大到无法打印时, numpy会自动跳过中间部分, 仅打印其角部分, 更多信息可供查看。

假若是期望将该功能予以关闭, 并且强令numpy把整个数组都打印出来, 那么能够对打印的选项作出改变, 借助使用:。

4)基本操作

那实施于数组之上的算术运算符号是逐个元素进行的, 所收获的乃是经重新构建诞生的数组, 随后会把最终结果写到新的数组里:

与其他某些语言针对矩阵的操作不一样, 在numpy里, 乘积操作符×是逐个元素来开展的。矩阵的积能够借助使用dot函数或者创建对象来达成:

诸多操作, 像是 += 以及 ×=, 对现有的数组予以原处修改支持, 可并非生成一个全新的数组:

若碰到不同种类数值或字符的阵列, 会把更具通用性、或者精确程度更高的那种数据类型, 作为新数组的数据类型:

诸如计算数组里各元素之和的类别一元运算 , 皆是通过类之方面来实行的:

默认情形下, 这些操作所具备的前提条件是, 数组当中的元素属于数字。借助指定axie参数, 能够指定针对数组的哪一个轴来开展操作:

5)通用函数

numpy给出常见的数学函数, 像sin, cos以及exp。于numpy里, 这些所谓“通用函数 (ufunc)”。在numpy之中, 这些函数是逐个元素开展操作的, 输出的便是新的数组:

6)索引,分片和迭代

一维数组可以被索引,分片和迭代。就像列表和其它序列一样:

多维数组能够在每一个轴上都具备一个索引, 凭借利用逗号隔开的那些元组进而指定存在于不同轴上的索引操作。

要是所提供的索引, 比轴的数量还要少, 那么缺省的索引所表示的轴上, 就会被视作是一个完整的分片。

置于括号里的表达式b【i】代表着一个含有跟随许多值的i: 依据所需去表示其他的轴, numpy同样能够运用三个点进行省略:

点(...), 其作用是依照需求去替代未明确指定的轴之中所有元素的索引, 举例来说, 要是x属于秩为5的数组(也就是存在5个轴这般), 那么。

仅仅是在第一个轴上采取行动(那就等同于最上层的那个轴), 这是基于多维数组的迭代所做的操作:

然而, 要是打算于数组里的每一个元素之上都开展操作, 那就得运用flat属性, 它是一个基于数组全部元素的迭代器()。

see also:

, , , , ,

3、形状操作

1)改变数组的形状

当指定数组每个轴上元素个数的时候,就形成了shape:

数组的shape可以通过其他命令来改变:

把ravel()给生成的数组当中, 其元素的顺序属于标准的“C - 风格”, 啥是这种风格呢也就是会有这样的意味, 那便是最右边的索引“改变的速度是最快的样式”。所以呢就有着这样的情况, 元素a【0, 0】之后跟着的就是a【0, 1】。要是数字被弄作一些别的shape情形的话, 那么该数组依旧会被认定为是“C - 风格”。而numpy通常生成的数组都是依照这种顺序来存储的, 所以ravel()并不需要去复制它的参数, 然而要是数组是经由另一个数组的分片或者不寻常的选项给生成的那么它有可能是需要进行复制的。函数ravel(), 其()可借助一个选项参数, 通过此参数去指定是否运用-style样式的存储, 其中该样式规定最左边的索引变化得最为快速。此项函数返回的是经过修改的shape参数, 因此, 该方法会对数组本身作出修改:

如果在操作中,某个维度的值为-1,那么就会被自动计算

see also:, , ,

2)将不同的数组堆叠在一起

可以在不同的轴上将几个数组堆叠起来:

函数, 能够把1维数组依照列的形式堆叠成为2维的数组, (此为下图的第5个命令), 需留意下列的函数:

另一方面, 函数会把1维数组依照行的形式堆叠成2维数组。对于超过2维的数组, 会顺着第二轴予以堆叠, 会沿着第一轴堆叠, 并且允许有一个可选的参数, 用来指定在第几个轴上面进行操作。

注意: 于复数情形里面, r_以及c_能够依照如下方式去产生数组。它们准许范围标识(“: ”)予以运用:

在把数组用作参数之际, 其操作跟在某种前提之下的结果相近, 并且能够借由一个可选参数去设定要连接的轴, 而这操作类似另外二者在特定默认参数时的情况。

see also:, , , ,, , 。

3)将一个数组划分成几个小的数组

运用函数, 能够顺着水平轴去划分数组。它可以开展等同划分, 又或是规定列划分:

沿着竖直轴进行划分, 允许指定沿着哪个轴划分。

4、复制和视图

在对数组开展操作之际, 它们的数据有时会被复制至一个全新的数组里, 有时候却又不会, 这一般而言是一处令初学者深感困惑的所在, 存在三种情形。

1)完全不复制

简单的赋值不会复制数组对象或者它们的数值:

将可变的对象作为引用,所以函数调用是没有复制的:

2)浅层复制

会有不同的数组对象, 能够共享相同的数据, view方法会生成一个新的数组对象, 在其中的数据看来是一样的。

3)深层复制

copy方法会生成一个数组和它的数据的复制版本:

4)函数和方法概述

以下是被罗列出来的, 属于numpy的函数列表以及方法, 其名字是和Numpy List有联系的。

创建一个数组, 内容为一组顿号间隔的无序元素, 其中有多个连续顿号, 最后以多个顿号告终。

转换:, , , , 。

不太明确你提供的这个内容具体要怎么改写, 请你明确一下更多要求或补充完整准确的信息, 以便我能按照要求进行改写。

询问:, , , 。

排序:, , , , , , , 。

操作():, , , , , , , , , , ,

基本的统计:, , , 。

基本的线性代数:, , , , 。

5、更少的基础

1)广播()的规则

广播能让通用函数里矩阵的shape并非完全相同: 其一, 广播首个规则是, 若所有输入数组维度数量不一, “1”会被反复增补到偏小数组形状上, 直至各数组都有相同维度数量;其二, 广播第二个规则是, 要保证size为1的数组能沿特定维度操作, 仿佛沿此维度该数组有最大形状(shape)。被假设成沿着这个维度有着一样的“广播”数组的部分, 是数组元素的值。这里, 和那种行为类似。在经过广播规则的应用之后, 所有数组的size都得能够匹配才行。更多一点的情况, 可以查看this。

6、索引技巧

numpy给出比比常规顺序更高多的索引办法, 除开归纳合并以及分片划分之外, 数组能够被整数数组以及布尔数组开展索引。

1)索引数组的索引

是这样的情况, 当索引数组呈现多维度的状态时, 索引数组之中的每一个值所指向的乃是原来数组之际的第一维, 也就是顶层那种。就如同下面所举的例子这般, 有着image(2*4), 它索引的是(5*3的矩阵)之中第一维之上存在着的不同子数组, 最终所得到的结果是2*4*3的矩阵。

接下来, 便是给出好些索引数组, 在这种时候, 每一个索引数组均须在形状方面保持一致, 于此情形下, 能够将其视作呈现为坐标点的样式:

当然, 我们能够把i以及j放进一个序列里(一个列表), 之后针对该列表开展索引:

然而, 我们没办法把 i 以及 j 放置到数组里面, 原因在于这个数组会被解读为 a 的第一维索引。

下面是另一个使用索引数组的例子:

可以使用索引数组来对指定元素进行更新:

可是呢, 一旦索引的那个列表当中存在重复情况, 相同的那个元素就会被多次更新, 而且会留存下最后的那次更新。

当你打算运用 += 去进行构建之际, 其相应的结果说不定并非如你所期望那般(不存在重复更新这种情况)。

就算零于索引列表里出现了两次, 那第零个元素也是只更新一回, 之所以如此, 是由于规定“a加等于一”等同于“a等于a与一相加”。

2)布尔数组的索引

要通过索引(整数)数组对数组索引时, 我们需提供索引列表来挑选, 明确所选数组中的项是不是我们想要的。而布尔索引最自然的方式是用与原始数组形状相同的布尔数组:

这个特性在赋值的时候很有用:

能够借助查看set, 去知晓怎样运用布尔索引, 来生成set的图像的。

第二种布尔索引形势, 更近似于整数索引, 针对数组的每一维而言, 我们给予其一个1维布尔数组, 用以挑选我们所期望的分片。

要留意, 1维布尔数组的长度, 必定要与你打算分片的维度, 也就是轴的长度相一致。在先前的例子里头, b1是一个具有1个秩的数组, 其长度为3, 这3也就是a中行的数量, 并且b2, 它的长度为4, 是与匹配a的第二个秩, 也就是列的索引相关的。

3)ix_()函数

能够对不同维度的向量予以组合, 接着依照参数的数量来判定进行多少维度的提升, 如下存在三个参数, 因而ax具备三维, 要是有四个参数, 那么ax便是四维了。举例来说, 按照a+b*c这样的式子对向量a、b、c的所有元素进行组合, 所得到的是一个4*3*5的矩阵:

或者定义函数:

然后像下面这样使用:

相较于ufunc.(numpy里的方法), 此版本具备优势之处在于, 它会运用广播规则(), 去规避生成参数数组等情况。

4)字符串的索引

见.

7、线性代数

基本的线性代数都包含在这里。

1)单一数组操作

numpy的文件夹内的.py的代码可以更细致的介绍原理:

2)矩阵类

对矩阵类的简短介绍:

3)索引:矩阵和2D数组的比较

注意到, NumPy数组与矩阵之间存在不同之处。NumPy提供了两种基本对象, 其一为N维的数组对象, 其二为通用的函数对象。其他对象皆建立于这些之上。特别而言,矩阵是2维的数组对象, 该对象继承自NumPy数组对象。对于数组以及矩阵来讲, 索引必须涵盖合适的一个或者多个组合, 这些组合包括: 整数标量、省略号、整数或布尔值列表、整数或布尔值元组、整数或布尔值的1维数组。一个矩阵能够被用以当作矩阵的 , 然而平常的数组、列表或者别的形式得要在特定的任务状况下达成。

于其中, 那个索引源自零起始。传统来讲, 这般的情况是, 我们把一个二维数组或者矩阵, 展现成运用行与列的常规数组模样, 顺着轴零去移动, 那就等同于顺着行来移动, 顺着轴一去移动, 那就等同于顺着列来移动。

如下例子:

此刻, 我们来思索一些简易的分片, 基础的分片运用分片对象或者整数, 比如说, A与M在其中较为相像, 不过务必要留意到, 分片Numpy数组并非对数据予以拷贝, 分片给出对同一数据的一个全新视图。

此刻, 针对索引里头的某些差异, 你说不定会运用以逗号分隔开来的索引, 针对多个轴开展索引操作:

留意到上头那两个结果存在差异, 运用一个二维数组的复制, 会产生一个一维的数组, 然而对于一个矩阵而言, 会生成一个二维的数组, 一个矩阵的分片始终会生成一个矩阵, 比如, 一个分片M生成一个形状为(1, 4)的矩阵, 另一方面, 一个数组的分片总是生成一个维度尽可能低的数组 , 比如, 要是C是一个三维的数组, C会生成一个二维数组, 与此同时C会生成一个一维数组, 我们所展示的结果能够看得出在数组分片的结果与对应的矩阵分片的结果是不相同的。

这儿假定我们期望数组的首个以及第三个列。一种采用分片的办法是运用列表:

较为老练的方法是使用take()方法:

如果我们想要跳过第一行,我们可以:

或者简单的使用A。然而,另一个方法是使用交叉结果:

为了读者的方便,再次打印数组:

当下, 使我们去开展一些更为繁杂的事项。假定我们期望留存所有那些首行大于1的列。一种途径是生成一个布尔索引:

正如我们想要的!但是索引矩阵不是很方便:

存在这样一个情况, 即分片矩阵的块会产生导致生成一个矩阵的结果。这里面矩阵具备一个有着便捷性的“A”属性, 该属性所具有的值是数组进行表征之体现, 基于此我们能够得出下面这样的情况:

如果想要有条件的在两个方向上分片矩阵。如下:

需要使用交叉积(cross )“ix_”:

8、技巧和提示

这里给出一些短的但是有用的提示。

1)“自动”

使用-1可以让机器自己计算该维度上是多少:

2)向量堆叠

怎样从一份相同尺寸的行向量清单里构造出一个二维数组吖? 在其中这算得上蛮容易的哟: 要是x跟y是俩具有相同大小的向量, 你仅仅只需m等于就行。在Numpy里这是借助函数, , , 以及, 这取决于在哪个维度上是需要被堆叠起来的。比如说:

这些函数背后的逻辑, 在超过二维的情况下, 是相当奇怪的。它是有关二维以外的情况的, 超出二维框架的。针对这种超乎二维状况存在的逻辑, 应详细观看《NumPy for Users》。

3)直方图

np的函数, 对于应用于一个数组那种情况, 会返回一对向量, 即数组的直方图以及bins的向量。要注意,存在这样一个函数, 用于建立直方图, 它叫hist , 如同在中那样, 这和numpy里的该函数不一样。主要的区别是, pylab.hist会自动去画直方图, 而numpy只是生成数据。

9、参考资料

有关标准库当中的Numpy的更多相关文章, 常用的标准库是哪一些, 第三方库又是哪些呢?

那种包含20个必不可少的库, 且也就是基本的第三方库, 读者您好呀, 在今天这个时刻, 我将会去介绍220个归属于我常常利用的工具范畴之内的库, 我心里认为你在把它们看完了以后, 同样会感觉没它们不行, 它们分别依次是, .Reitz。

常用的标准库以及第三方库

20个基本的、属于常用工具范畴的第三方库, 是哪些属于常用的标准库以及第三方库? 喂, 读者。今天于我来说会介绍20个自己常用工具里的库, 我笃定你瞧完之后也会觉着没法离开它们。它们……, 是这样, 有哪些?

常用的标准库以及第三方库有哪些?

作者是史豹, 链接存在, 来源为知乎, 著作权归作者所有, 商业转载要联系作者获取授权, 非商业转载需注明。

7.标准库--文件系统

其标准库含有大量工具, 这些工具能够处理文件系统里的文件, 能够构造与解析文件名, 并且还能检查文件内容。而处理文件的首要步骤乃是得确定正在处理的文件的名字。文件名会被表示成简单的字符串形式, 除此之外会提及别的……

.5学习第二章(1)标准库,bytes

一.输出库的路径为, 一为sys标准库, 也就是sys.path, 其结果是, 呈现为 'E:\\练习\\学习\\Day2' , 还有,E:\\这样的形式, 等等。

基础系列教程——.x标准模块库目录

基础系列教程, 其中包含, 有关.x 标准模块库目录的文本, 这里的文本涉及通用字符串操作, 还有 re 相关的正则表达式操作, 有针对差异计算的工具, 存在文本填工作方式的文本填充, 等等。

9.标准库--数据压缩与归档

即便当下现代计算机系统存储能力不断在增长, 然而生成数据的增长却是毫无休止的, 无损压缩算法通过压缩或解压缩数据所耗费的时间去换取存储数据所需的空间, 以此来弥补存储能力的欠缺。

8.标准库--数据持久存储与交换

为了能够长期使用而对数据进行持久存储, 这事儿涵盖两个不同方面, 一方面是要在对象于内存里的表达方式以及存放格式其间来回倒换数据, 另一方面涉及去处理经过这种倒换之后的数据的存储区域。标准库里存在许多模块, 这些模块能够应对不同情形下的这两个方面, 其中有两个模块能够把对象变换成一种……

6.标准库--数学运算

它作为一种通用的变成语言, 常常被用来解决数学问题, 它包含一些用于管理整数和浮点数的内置类型, 这对于完成一般应用里可能出现的基本数学运算颇为合适, 并且标准库中含有一些用于满足更高级需求的模块。

随机推荐 之旅——第一站:从变量说起

版 极客学院爬虫V2

版极客学院爬虫V2, 1.基本技术的使用, 2.这个爬虫的难点在于, 与之相关尝试了好多次才成功(模拟登录), 不然就只能抓取免费课...标点。

mysql 动态新建以及删除分区表

因项目所需, 近来针对在mysql数据库里怎样动态去新建乃至删除分区表做了一番研究。要是全部依靠存储过程, 于新建以及删除分区表而言, 在逻辑方面较为刻板, 缺乏灵活性, 并且还极易出现差错。所以, 我创建了一个数据表。

Eliot

T.S. Eliot, Eliot(1888 至 1965 年)出生于圣路易斯, 其出身于一个古老的……。

ASP.NET MVC IOC 之攻略

你提供的内容似乎不太完整且存在一些表述不清楚的地方, 不太能准确按照要求进行改写。请补充完整准确的内容以便能更好地完成任务。

记一次惨痛的线上bug

背景讲述, 在刚入职新公司两个月之际, 接手了一个红包系统, 当时资历尚浅, 对业务也并非十分熟悉, 因公司要开发新的平台, 需运用红包功能去进行推广, 所以便按产品的需求来进行开发 , 然而, 问题恰恰出在这儿, 红包接口相对陈旧。

结合操作Flash网页

的官网地址: 首先下载的jar包: java-d ...

用ztree.js, 一生受益, 十分钟就能学会去运用tree树形结构插件。

瞅见了ztree.js这几个字词, 毫无疑问, 那必定是tree树形结构了, 往昔的swing时期存在jtree, 后续年代有和, 虽说我未曾编写过, 但我曾目睹过, 一些微小功能做。

理解

首先, 术语被翻译为具有反转之意, 其制定了关联关系里的方向, 当set的属性处于默认状况下;会依照持久化对象的属性变化,来同步更新数据库最终, 得到两条s。

AC日记——找最大数序列 1.9 10

输入n行, 其中每行皆为不超过100个的无符号整数, 这些无符号数均不超过4位, 请输出最大整数, 以及最大整数所在的行号, 而行号需从1开始算起, 还要算出总时间限制以及内存限制, 描述该情况。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询