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里对list中的整数求平均并排序
Sep 12 Python
Python Requests 基础入门
Apr 07 Python
Python使用arrow库优雅地处理时间数据详解
Oct 10 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
Apr 12 Python
Numpy数组转置的两种实现方法
Apr 17 Python
python中csv文件的若干读写方法小结
Jul 04 Python
IntelliJ IDEA安装运行python插件方法
Dec 10 Python
django做form表单的数据验证过程详解
Jul 26 Python
python实现翻译word表格小程序
Feb 27 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
Feb 28 Python
python3读取文件指定行的三种方法
May 24 Python
Python虚拟环境virtualenv是如何使用的
Jun 20 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
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
基于jQuery的history历史记录插件
2010/12/11 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
js模仿hover的具体实现代码
2013/12/30 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
告诉你什么是javascript的回调函数
2014/09/04 Javascript
node.js中的fs.fstatSync方法使用说明
2014/12/15 Javascript
ANGULARJS中使用JQUERY分页控件
2015/09/16 Javascript
select获取下拉框的值 下拉框默认选中方法
2018/02/28 Javascript
element ui 表格动态列显示空白bug 修复方法
2018/09/04 Javascript
通过实例了解js函数中参数的传递
2019/06/15 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
Python 错误和异常小结
2013/10/09 Python
github配置使用指南
2014/11/18 Python
将Python代码打包为jar软件的简单方法
2015/08/04 Python
python实现下载pop3邮件保存到本地
2018/06/19 Python
Python绘制正余弦函数图像的方法
2018/08/28 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
2018/10/11 Python
解决Python selenium get页面很慢时的问题
2019/01/30 Python
Python3模拟登录操作实例分析
2019/03/12 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
python使用隐式循环快速求和的实现示例
2020/09/11 Python
python集合的新增元素方法整理
2020/12/07 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
仓库管理专业个人自我评价范文
2013/11/11 职场文书
给国外客户的邀请函
2014/01/30 职场文书
中学生操行评语
2014/04/24 职场文书
2015年教师节演讲稿范文
2015/03/19 职场文书
拿破仑传读书笔记
2015/07/01 职场文书
感谢师恩主题班会
2015/08/17 职场文书
导游词之天下银坑景区
2019/11/21 职场文书