网络编程
位置:首页>> 网络编程>> Python编程>> NumPy 数组使用大全

NumPy 数组使用大全

作者:疯狂的技术宅  发布时间:2023-05-28 23:10:57 

标签:NumPy,数组

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

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

为什么要用 NumPy

NumPy 提供了一个 ndarray 对象,可以使用它来对任何维度的数组进行操作。 ndarray 代表 N 维数组,其中 N 是任意数字。这意味着 NumPy 数组可以是任何维度的。

与 Python 的 List 相比,NumPy 具有许多优势。我们可以在 NumPy 阵列上执行高性能操作,例如:

  1. 对数组成员进行排序

  2. 数学和逻辑运算

  3. 输入/输出功能

  4. 统计和线性代数运算

安装 NumPy

要安装NumPy,你的电脑上要先有 Python 和 Pip。

在终端中运行以下命令:


pip install numpy

然后你就可以在脚本中导入 NumPy 了,如下所示:


import numpy

添加数组元素

可以用 NumPy 模块的 append() 方法向 NumPy 数组中添加元素。

append() 的语法如下:


numpy.append(array, value, axis)

value 会被追加到在数组的末尾,并返回一个包含所有元素的 ndarray。

参数 axis 是一个可选的整数,用于定义数组的显示方式。如果没有指定,则数组结构将展平,稍后会演示用法。

以下示例,其中首先声明数组,然后用 append 方法向数组添加更多的值:


import numpy
a = numpy.array([1, 2, 3])
newArray = numpy.append (a, [10, 11, 12])
print(newArray)
# 输出:[ 1 2 3 10 11 12]

添加一列

也可以用NumPy 的 append() 方法插入一列。

在下面的例子中,我们创建了一个二维数组并插入了两列:


import numpy

a = numpy.array([[1, 2, 3], [4, 5, 6]])
b = numpy.array([[400], [800]])
newArray = numpy.append(a, b, axis = 1)
print(newArray)

"""
输出:
[[ 1  2  3 400]
[ 4  5  6 800]]
"""

如果没有使用 axis 参数,则会输出:

[ 1 2 3 4 5 6 400 800]

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

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

Consider the example below:

考虑以下示例:


import numpy
a = numpy.array([1, 2, 3])
newArray = numpy.insert(a, 1, 90)
print(newArray)
# 输出:[ 1 90 2 3]

这里 insert() 方法在索引1处添加元素。在Python中数组索引从0开始。

追加一行

也可以用 append() 方法向数组添加行,就像在数组中附加元素一样简单:


import numpy
a = numpy.array([[1, 2, 3], [4, 5, 6]])
newArray = numpy.append(a, [[50, 60, 70]], axis = 0)
print(newArray)
"""
输出“
[[ 1 2 3]
[ 4 5 6]
[50 60 70]]
"""

删除元素

可以用 NumPy 模块的 delete() 方法删除 NumPy 数组元素:


import numpy
a = numpy.array([1, 2, 3])
newArray = numpy.delete(a, 1, axis = 0)
print(newArray)
# 输出:[1 3]

在本例子中,我们有一个一维数组,用 delete() 方法从数组中删除了索引 1 处的元素。

删除一行

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

下面的例子中我们从二维数组中删除了一行:


import numpy
a = numpy.array([[1, 2, 3], [4, 5, 6], [10, 20, 30]])
newArray = numpy.delete(a, 1, axis = 0)
print(newArray)
"""
输出:
[[ 1 2 3]
[10 20 30]]
"""

在 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")
else:
 print("The array = ", a)
# 输出:The array = [1 2 3]

在上面的代码中,数组中有三个元素,因此它不是空的,判断条件将返回false。如果数组中没有元素,则 if 条件会变为 true 并且将打印空消息。如果数组等于:


a = numpy.array([])

上述代码将会输出:

The given Array is empty

查找值的索引

要查找值对应的索引,可以用 NumPy 模块的 where() 方法,如下例所示:


import numpy
a = numpy.array([1, 2, 3, 4, 5])
print("5 is found at index: ", numpy.where(a == 5))
# 输出:5 is found at index: (array([4]),)

如果你只想得到索引,可以这样写:


import numpy

a = numpy.array([1, 2, 3, 4, 5])
index = numpy.where(a == 5)
print("5 is found at index: ", index[0])
#输出: 5 is found at index: [4]

NumPy 数组切片

数组切片是从给定数组中提取子集的过程。你可以用冒号( : )运算符对数组进行切片,并指定数组索引的开始和结束位置,例如:


array[from:to]

下面的例子中提取从索引 2 到索引 5 的元素:


import numpy
a = numpy.array([1, 2, 3, 4, 5, 6, 7, 8])
print("A subset of array a = ", a[2:5])
# 输出:A subset of array a = [3 4 5]

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


import numpy
a = numpy.array([1, 2, 3, 4, 5, 6, 7, 8])
print("A subset of array a = ", a[-3:])
# 输出:A subset of array a = [6 7 8]

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

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


import numpy
addition = lambda x: x + 2
a = numpy.array([1, 2, 3, 4, 5, 6])
print("Array after addition function: ", addition(a))
# 输出:Array after addition function: [3 4 5 6 7 8]

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

NumPy 数组的长度

要得到 NumPy 数组的长度,可以用 size 属性,如下所示:


import numpy
a = numpy.array([1, 2, 3, 4, 5, 6])
print("The size of array = ", a.size)
# 输出:The size of array = 6

从 list 创建 NumPy 数组

假设你有一个列表:

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)
# 输出:The NumPy array from Python list = [1 2 3 4 5]

同样,使用 array() 方法,也可以从元组创建 NumPy 数组。如下所示:


import numpy
t = (1, 2, 3, 4, 5)
a = numpy.array(t)
print("The NumPy array from Python Tuple = ", a)
# 输出:The NumPy array from Python Tuple = [1 2 3 4 5]

将 NumPy 数组转换为 list

要将数组转换为list,可以使用 NumPy 模块的 tolist()方法。


import numpy
a = numpy.array([1, 2, 3, 4, 5])
print("Array to list = ", a.tolist())
# 输出:Array to list = [1, 2, 3, 4, 5]

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

把 NumPy 数组导出为 CSV

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


import numpy
a = numpy.array([1, 2, 3, 4, 5])
numpy.savetxt("myArray.csv", a)

此代码将在 Python 代码文件所在路径下生成 CSV 文件。当然你也可以指定路径。

该文件的内容如下:

1.000000000000000000e+00
2.000000000000000000e+00
3.000000000000000000e+00
4.000000000000000000e+00
5.000000000000000000e+00

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


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

对 NumPy 数组排序

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

sort() 函数有一个可选参数 axis(整数),默认为 -1。axis 指定我们要对数组进行排序的轴。 -1 表示将根据最后一个轴对数组进行排序。


import numpy
a = numpy.array([16, 3, 2, 6, 8, 10, 1])
print("Sorted array = ", numpy.sort(a))
# 输出:Sorted array = [ 1 2 3 6 8 10 16]

在这个例子中,我们在 print 语句中调用了 sort() 方法。数组 a 被传递给 sort 函数。

归一化数组

归一化数组是指将数组的值置于某个定义范围的过程。例如,我们想要在 -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 = \n", x)
"""
输出:
After normalization array x =
[0.11111111 0.33333333 0.     0.27777778 0.44444444 1.
0.05555556]
"""

数组索引

索引指向数组中的一个元素。在下面的例子中,分别用到了一维和二维数组中的索引:


import numpy
a = numpy.array([20, 13, 42, 86, 81, 9, 11])
print("Element at index 3 = ", a[3])
# 输出:Element at index 3 = 86

下面是二维数组:


import numpy
a = numpy.array([[20, 13, 42], [86, 81, 9]])
print("Element at index a[1][2] = ", a[1][2])
# 输出:Element at index a[1][2] = 9

索引 [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)
# 输出:The new array = [ 1 2 3 4 5 10 20 30 40 50]

在此例中,创建两个 NumPy 数组 a, b 。然后把两个数组传给 append()。当数组 b 作为第二个参数传递时,将被添加到数组 a 的末尾。

总结

正如大家所见,NumPy 数组用起来非常简单。在使用很多机器学习库时,NumPy 数组非常重要。可以说NumPy 是人工智能的大门。

来源:https://segmentfault.com/a/1190000018975446

0
投稿

猜你喜欢

  • 当浏览网页时,总有那么一类网站华丽而富有趣味性。在浏览信息的同时,足够让我们眼前一亮。它们在充分融入动画、视频、游戏、甚至是与众不同的交互操
  • 这片文章大体概括了一些设计网页中的大问题。希望能给你做下一个网页时给予一些儿启发。1、记住:你能掌控的时间是有限的我仅仅用4秒钟就能浏览完平
  • python中判断文件结束符的方法:可以使用try except语句块来进行判断。具体使用方法:【try:while True:s = in
  • 页面重构需要考虑的一个重点是XHTML代码语义化,就算是在无任何CSS样式修饰的情况下也能给他人在阅读时带来便利,甚至可以夸张点说在搜索引擎
  • 仿windows选项卡或叫做tabpan以及tabpage,现在还有最新的进展譬如仿淘宝网导航菜单效果皆属于此类:运行代码框<scri
  • 淡入淡出图片轮换轮播效果,可以做新闻图片推荐需要的拿去用,效果预览请点击运行代码相关效果推荐:迅雷首页新闻图片轮播效果js源码 <!D
  • 在开发和调试基于XML的应用的时候,程序员往往为找不到合适的快速桌面XPATH测试软件发愁。诚然,市面上有成套的XML编辑软件,但是它们往往
  • 识别MNIST已经成了深度学习的hello world,所以每次例程基本都会用到这个数据集,这个数据集在tensorflow内部用着很好的封
  • 00. 什么是 freecache?freecache 是一个用 go 语言实现的本地缓存系统(类似于 lru)。相关的 github 地址
  • 本文内容由经典论坛星级会员 lipengadmin 收集整理绝大部分属于转载,有很多还是出自咱们蓝色的经典论坛.*****[第1页目录]**
  • 本文介绍FCKeditor在Java环境下的使用方法。一、简介 功能:所见即所得,支持图片和Flash,工具栏可自由配置,使用简单兼容性:I
  • 变量全都是引用跟其他编程语言不同,Python的变量不是盒子,不会存储数据,它们只是引用,就像标签一样,贴在对象上面。比如:>>
  • Selenium的介绍、配置和调用Selenium(浏览器自动化测试框架) 是一个用于Web应用程序测试的工具。Selenium测
  • 说明本文根据https://github.com/liuchengxu/blockchain-tutorial的内容,用python实现的,
  • 本文实例为大家分享了python实现抽奖小程序的具体代码,供大家参考,具体内容如下设计一个抽奖服务 背景:有x个奖品,要求在y天内
  • 一、为什么要搭建爬虫代理池在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制,即在某一时间段内,当某个ip的访问次数达到一定的阀值时
  • Python的可视化工具有很多,数不胜数,各有优劣。本文就对其中的pylab进行介绍。之所以介绍这一款,是因为它和Matlab的强烈相似度,
  • 本文汇总了python文件操作相关知识点。分享给大家供大家参考,具体如下:总是记不住API。昨晚写的时候用到了这些,但是没记住,于是就索性整
  • 如下所示:import time首先导入时间模块在程序开始执行的地方写入:start=time.clock()在程序末尾写入:end=tim
  • 前言本文将教你如何使用YOLOV3对象检测器、OpenCV和Python实现对图像和视频流的检测。用到的文件有yolov3.weights、
手机版 网络编程 asp之家 www.aspxhome.com