NumPy 数组使用大全


Posted in Python onApril 25, 2019

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 是人工智能的大门。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的startswith和endswith函数使用实例
Aug 25 Python
python根据出生年份简单计算生肖的方法
Mar 27 Python
基于Python的接口测试框架实例
Nov 04 Python
PyQt5每天必学之切换按钮
Aug 20 Python
Centos下实现安装Python3.6和Python2共存
Aug 15 Python
python 格式化输出百分号的方法
Jan 20 Python
Pycharm运行加载文本出现错误的解决方法
Jun 27 Python
tensorflow实现二维平面模拟三维数据教程
Feb 11 Python
Python3标准库glob文件名模式匹配的问题
Mar 13 Python
python 画图 图例自由定义方式
Apr 17 Python
利用python查看数组中的所有元素是否相同
Jan 08 Python
python开发人人对战的五子棋小游戏
May 02 Python
Python+OpenCV采集本地摄像头的视频
Apr 25 #Python
python利用selenium进行浏览器爬虫
Apr 25 #Python
python3人脸识别的两种方法
Apr 25 #Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 #Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 #Python
利用Python查看微信共同好友功能的实现代码
Apr 24 #Python
python实现飞机大战游戏
Oct 26 #Python
You might like
Ajax PHP分页演示
2007/01/02 PHP
学习php设计模式 php实现命令模式(command)
2015/12/08 PHP
php递归函数怎么用才有效
2018/02/24 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
JQuery循环滚动图片代码
2011/12/08 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
easyUI combobox实现联动效果
2017/01/17 Javascript
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
vue+webpack实现异步加载三种用法示例详解
2018/04/24 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
vue+axios全局添加请求头和参数操作
2020/07/24 Javascript
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
HTML5使用ApplicationCache接口实现离线缓存技术解决离线难题
2012/12/13 HTML / CSS
Maxpeedingrods美国:高性能汽车零件
2020/02/14 全球购物
酒后驾驶检讨书
2014/01/27 职场文书
更夫岗位责任制
2014/02/11 职场文书
社区母亲节活动记录
2014/03/06 职场文书
航班延误投诉信
2015/07/02 职场文书
诚信教育主题班会
2015/08/13 职场文书
Go timer如何调度
2021/06/09 Golang
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis
MySQL数据库 安全管理
2022/05/06 MySQL