热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【精读】Numpy详解

(给机器学习算法与Python学习加星标,提升AI技能)Numpy是一个Python库模块,在Python编程中用于科学计算

(给机器学习算法与Python学习加星标,提升AI技能)

Numpy是一个Python库/模块,在Python编程中用于科学计算。在本教程中,你将学习如何在Numpy数组上执行一系列操作,例如以多种方式添加、删除、排序和操作元素。

Numpy提供一个多维数组对象和其他派生数组,如掩码数组或掩码多维数组。

为什么使用Numpy?

Numpy模块提供一个ndarray对象,我们可以用这个对象来对任意维度的数组执行操作。ndarray代表N维数组,其中N是任意数字。这意味着Numpy数组可以是任意维度的数组。

与Python列表相比,Numpy有很多优点。我们可以对Numpy数组执行高性能操作,例如:

1. 数组成员排序

2. 数学和逻辑运算

3. 输入/输出功能

4. 统计和线性代数运算

如何安装Numpy?

想要安装Numpy,需要在电脑系统上安装Python和Pip。

在Windows操作系统上执行以下命令:

pip install numpy

现在可以像这样在脚本中导入Numpy:

import numpy

添加数组元素

你可以使用NumPy模块的append()方法添加一个NumPy数组元素。append的使用操作如下:

numpy.append(array, value, axis)

这些值将附加在数组的末尾,新的ndarray将与上面所示的新值和旧值一起返回。

axis是一个可选的整数,用于定义数组的显示方式。如果没有指定axis,数组结构将被展平,如你稍后将看到的一样。

请看下面的示例,首先创建一个数组,然后使用append方法向该数组添加更多值:

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

newArray = numpy.append (a, [10, 11, 12])

添加列

使用Numpy的append()方法插入列。

请看下面的示例,创建了一个二维数组并插入了两列:

a = numpy.array([[1, 2, 3], [4, 5, 6]])

b = numpy.array([[400], [800]])

newArray = numpy.append(a, b, axis = 1)

如果未使用axis属性,则输出如下:

这就是数组结构的扁平化过程。

在NumPy中,还可以使用insert()方法插入元素或列。insert()和append()两种方法之间的区别在于我们在使用insert()方法时,可以指定要在哪个索引处添加元素,而append()方法则会在数组末尾添加一个值。

请看以下示例:

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

newArray = numpy.insert(a, 1, 90)

这里,insert()方法在索引1处添加元素。请记住数组索引从0开始。

添加行

在本节中,我们将使用append()方法向数组添加行。此方法就像在数组中添加元素一样简单。请看以下示例:

a = numpy.array([[1, 2, 3], [4, 5, 6]])

newArray = numpy.append(a, [[50, 60, 70]], axis = 0)

删除元素

可以使用NumPy模块的delete()方法删除NumPy数组元素,以下示例对此进行了演示:

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

newArray = numpy.delete(a, 1, axis = 0)

输出如下:

在上面的例子中,可以看到一个单维数组。delete()方法从数组中删除索引1处的元素。

删除行

同样,可以使用delete()方法删除行。

请看以下示例,从二维数组中删除了一行:

a = numpy.array([[1, 2, 3], [4, 5, 6], [10, 20, 30]])

newArray = numpy.delete(a, 1, axis = 0)

在delete()方法中,首先给出数组,然后给出要删除元素的索引。在上面的示例中,删除索引为1的第二个元素。

检查 NumPy 数组是否为空值

使用size方法得出数组中元素的总数。

在下面的示例中,我们将会使用一个if语句,该语句通过ndarray.size去检查数组中是否有元素,其中ndarray是任意给定的NumPy数组:

import numpy

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

if(a.size == 0):

print("The given Array is empty")

其他:

print("The array = ", a)

输出如下:

在上面的代码中,有三个元素,因此这个数组不是空的,if条件将返回false。

如果没有元素,if条件将变为true,并将显示空白数组。

如果我们的数组等于:

a = numpy.array([])

上述代码的输出如下:

查找值的索引

使用Numpy模块的where()方法查找值的索引,如下例所示:

import numpy

a = numpy.array([1, 2, 3, 4, 5])

print("5 is found at index: ", numpy.where(a == 5))

Where()方法还将返回数据类型。如果你只想获取索引,请使用以下代码:

import numpy

a = numpy.array([1, 2, 3, 4, 5])

index = numpy.where(a == 5)

print("5 is found at index: ", index[0])

NumPy 数组切片

数组切片是从给定数组中提取子集的过程。可以使用冒号运算符对数组进行切片,并指定数组索引的起点和终点,例如:

array[from:to]

下面的示例突出了这点:

import numpy

a = numpy.array([1, 2, 3, 4, 5, 6, 7, 8])

print("A subset of array a = ", a[2:5])

这里我们提取索引2到索引5中的元素。输出将是:

如果想要提取最后三个元素,可以通过使用负片切片来完成此操作,如下所示:

import numpy

a = numpy.array([1, 2, 3, 4, 5, 6, 7, 8])

print("A subset of array a = ", a[-3:])

将函数应用于所有数组元素

在下面的示例中,我们将创建一个lambda函数,在该函数上传递数组以将其应用于所有元素:

import numpy

addition = lambda x: x + 2

a = numpy.array([1, 2, 3, 4, 5, 6])

print("Array after addition function: ", addition(a))

在此示例中,创建了一个lambda函数,它将每个元素递增2个值。

NumPy 数组长度

你可以通过使用NumPy模块的size属性来获取NumPy数组的长度,如下例所示:

import numpy

a = numpy.array([1, 2, 3, 4, 5, 6])

print("The size of array = ", a.size)

从列表中创建numpy数组

Python中的列表是方括号之间的多个元素。

假设有一个列表:

l = [1, 2, 3, 4, 5]

现在要根据这个列表创建一个数组,我们将使用NumPy模块的array()方法:

import numpy

l = [1, 2, 3, 4, 5]

a = numpy.array(l)

print("The NumPy array from Python list = ", a)

同样地,通过使用array()方法,我们可以根据元组创建一个NumPy数组。一个元组包含多个用圆括号括起来的元素,如下所示:

import numpy

t = (1, 2, 3, 4, 5)

a = numpy.array(t)

print("The NumPy array from Python Tuple = ", a)

将NumPy数组转换为列表

想要将数组转换为列表,我们可以使用NumPy模块的tolist()方法。

请看以下代码:

import numpy

a = numpy.array([1, 2, 3, 4, 5])

print("Array to list = ", a.tolist())

在这段代码中,我们简单地运用了能将数组转换为列表的tolist()方法。然后将新创建的列表打印到输出屏幕。

从NumPy 到CSV

使用NumPy模块的savetxt()方法将数组导出为CSV文件,如下例所示:

import numpy

a = numpy.array([1, 2, 3, 4, 5])

numpy.savetxt("myArray.csv", a)

代码将在Python代码文件存储位置生成一个CSV文件。你还可以指定其路径。运行脚本时,文件将生成如下代码:

该文件的内容如下:

你可以删除额外的零填充,如下所示:

numpy.savetxt("myArray.csv", a,fmt= %.2f )

将 NumPy 数组排序

可以使用Numpy模块的sort()方法对numpy数组进行排序:

Sort()函数采用一个可选的axis(整数),默认值为-1。此axis指定要对数组进行排序的axis。-1表示数组将根据最后一个axis进行排序。

请看以下示例:

import numpy

a = numpy.array([16, 3, 2, 6, 8, 10, 1])

print("Sorted array = ", numpy.sort(a))

在本例中,我们在print语句中运用了sort()方法。数组“a”被传递给排序函数。其输出如下:

规范化数组

规范化数组是将数组值设置为某个定义范围内的过程。例如,我们可以说我们想要规范化一个介于-1和1之间的数组,依此类推。

规范化公式如下:

x = (x – xmin) / (xmax – xmin)

现在将这个公式应用于数组,对它进行规范化操作。要查找数组中的最大和最小项,分别使用NumPy的max()和min()方法。

import numpy

x= numpy.array([400, 800, 200, 700, 1000, 2000, 300])

xmax = x.max()

xmin = x.min()

x = (x - xmin)/(xmax - xmin)

print("After normalization array x = ", x)

数组索引

索引指的是数组的一个元素。在以下示例中,我们在单维和二维数组中都使用了索引:

import numpy

a = numpy.array([20, 13, 42, 86, 81, 9, 11])

print("Element at index 3 = ", a[3])

现在使用二维数组进行索引:

import numpy

a = numpy.array([[20, 13, 42], [86, 81, 9]])

print("Element at index a[1][2] = ", a[1][2])

索引[1] [2]表示第二行和第三列(索引从0开始)。因此,我们在输出屏幕上能看到9个索引。

将numpy数组附加到另一个数组上

你可以使用append()方法将一个NumPy数组附加到另一个NumPy数组上。请看以下示例:

import numpy

a = numpy.array([1, 2, 3, 4, 5])

b = numpy.array([10, 20, 30, 40, 50])

newArray = numpy.append(a, b)

print("The new array = ", newArray)

在本例中,我们创建一个numpy数组“a”,然后创建另一个名为“b”的数组。然后我们使用append()方法传递两个数组。当数组“b”作为第二个参数传递时,将被添加到数组“a”的末尾。

正如我们所见,使用Numpy数组非常简单。在使用大多数机器学习库时,Numpy数组非常重要。所以,我们可以说Numpy是通往人工智能的大门。

相关链接:

https://www.codementor.io/likegeeks/python-numpy-array-tutorial-rw4gnhfg0

推荐阅读
GitHub超 7.9 万星,最全Python入门算法!【原来如此】图文并茂,一文读懂"自注意力"背后的技术!论文绘图神器来了:一行代码绘制不同期刊格式图表,哈佛博士后开源这 68 个 Python 内置函数请收好!长文 | 盘点 YOLOv4 这些鲜为人知的特性!




推荐阅读
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
author-avatar
王者荣耀戒毒所
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有