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快速查找算法应用实例
Sep 26 Python
Python中使用HTMLParser解析html实例
Feb 08 Python
Python的Flask框架中实现分页功能的教程
Apr 20 Python
Python 操作MySQL详解及实例
Apr 30 Python
python 第三方库的安装及pip的使用详解
May 11 Python
Django Channels 实现点对点实时聊天和消息推送功能
Jul 17 Python
Python 3 使用Pillow生成漂亮的分形树图片
Dec 24 Python
学习python需要有编程基础吗
Jun 02 Python
Keras之自定义损失(loss)函数用法说明
Jun 10 Python
Python pymsql模块的使用
Sep 07 Python
pytorch加载预训练模型与自己模型不匹配的解决方案
May 13 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
缓存技术详谈―php
2006/12/14 PHP
php中随机显示图片的函数代码
2011/06/23 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
2011/12/05 PHP
php 生成自动创建文件夹并上传文件的示例代码
2014/03/07 PHP
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
PHP人民币金额转大写实例代码
2015/10/02 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
node+express+jade制作简单网站指南
2014/11/26 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
2017/12/07 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
layui默认选中table的CheckBox复选框方法
2019/09/19 Javascript
layer.open组件获取弹出层页面变量、函数的实例
2019/09/25 Javascript
js实现验证码功能
2020/07/24 Javascript
Python获取暗黑破坏神3战网前1000命位玩家的英雄技能统计
2016/07/04 Python
python向字符串中添加元素的实例方法
2019/06/28 Python
python 计算数据偏差和峰度的方法
2019/06/29 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
python Canny边缘检测算法的实现
2020/04/24 Python
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
链表面试题-一个链表的结点结构
2015/05/04 面试题
应届医学毕业生求职信分享
2013/12/02 职场文书
网站创业计划书
2014/04/30 职场文书
学院党的群众路线教育实践活动第一阶段情况汇报
2014/10/25 职场文书
西柏坡导游词
2015/02/05 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android
Python与C++中梯度方向直方图的实现
2022/03/17 Python
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android