目录
一.NumPy是什么
NumPy 的全称是“ Numeric Python”,它是 Python 的第三方扩展包,主要用来计算、处理一维或多维数组。
在数组算术计算方面, NumPy 提供了大量的数学函数。NumPy 的底层主要用 C语言编写,因此它能够高速地执行数值计算。NumPy 还提供了多种数据结构,这些数据结构能够非常契合的应用在数组和矩阵的运算上。
随着数据科学(Data Science,简称 DS,包括大数据分析与处理、大数据存储、数据抓取等分支)的蓬勃发展,像 NumPy、SciPy(Python科学计算库)、Pandas(基于NumPy的数据处理库) 等数据分析库都有了大量的增长,它们都具有较简单的语法格式。
在矩阵乘法与数组形状处理上,NumPy 有着非常不错的性能,再加上 NumPy 的计算速度很快,这些都是 NumPy 成为一款数据分析工具的重要原因。
数组形状可以理解为数组的维度,比如一维数组、二维数组、三维数组等;以二维数组为例,改变数组形状就是交换数组的行和列,也即将数组旋转 90 度。
NumPy 可以很便捷高效地处理大量数据,那么使用 NumPy 做数据处理有哪些优点呢?总结如下:
- NumPy 是 Python 科学计算基础库;
- NumPy 可以对数组进行高效的数学运算;
- NumPy 的 ndarray 对象可以用来构建多维数组;
- NumPy 能够执行傅立叶变换与重塑多维数组形状;
- NumPy 提供了线性代数,以及随机数生成的内置函数。
NumPy应用场景
NumPy 通常与 SciPy(Python科学计算库)和 Matplotlib(Python绘图库)等软件包组合使用,这种组合方式被用来广泛地代替 MatLab 的使用。
MatLab 是一款强大的数学计算软件,广泛应用在数据分析、电子通信、深度学习、图像处理、机器视觉、量化金融等领域,但近些年随着 Python 语言的迅猛发展,Python 被看作是一种更适合代替 MatLab 的编程语言。您可以使用 NumPy、SciPy 与 Matplotlib 等 Python 工具包搭建科学计算环境,比如 Anaconda 就是是一个开源的 Python 发行版本,它包含了 Python 、NumPy 等 180 多个科学包及其依赖项。
因为 NumPy 是 Python 的扩展程序包,所以您在学习 NumPy 之前应该具备一些 Python 基础知识,这对本教程的学习将大有裨益。如果您想了解关于 NumPy 更多的知识可浏览 NumPy 官网(NumPy)。
二.NumPy下载与安装
window使用清华源安装
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
Linux系统安装
在 Linux 系统中,您可以选择只单独安装 NumPy 一个软件包,也可以同时安装多个软件包。下面介绍了不同的 Linux 发行版具体的安装命令,如下所示:
1) Ubuntu/Debian
对于 Ubuntu/Debian 系统,可以在终端上执行以下命令:
$ sudo apt-get install python-numpy python-scipy python-matplotlib ipython ipython-notebook python-pandas python-sympy python-nose
2) Redhat/CentOS
在 Redhat/CentOS 系统上执行以下命令来安装 NumPy 与其它科学计算包:
$ sudo yum install numpy scipy python-matplotlib ipython python-pandas sympy python-nose
注意:不同的软件包之间必须使用“一个空格”隔开。
三.NumPy ndarray对象
NumPy 定义了一个 n 维数组对象,简称 ndarray 对象,它是一个一系列相同类型元素组成的数组集合。数组中的每个元素都占有大小相同的内存块,您可以使用索引或切片的方式获取数组中的每个元素。
ndarray 对象有一个 dtype 属性,该属性用来描述元素的数据类型,相关知识会在《NumPy数据类型》一节做详细介绍 。
ndarray 对象采用了数组的索引机制,将数组中的每个元素映射到内存块上,并且按照一定的布局对内存块进行排列,常用的布局方式有两种,即按行或者按列。
创建ndarray对象
通过 NumPy 的内置函数 array() 可以创建 ndarray 对象,其语法格式如下:
numpy.array(object, dtype = None, copy = True, order = None,ndmin = 0)
下面表格对其参数做了说明:
序号 | 参数 | 描述说明 |
---|---|---|
1 | object | 表示一个数组序列。 |
2 | dtype | 可选参数,通过它可以更改数组的数据类型。 |
3 | copy | 可选参数,表示数组能否被复制,默认是 True。 |
4 | order | 以哪种内存布局创建数组,有 3 个可选值,分别是 C(行序列)/F(列序列)/A(默认)。 |
5 | ndim | 用于指定数组的维度。 |
创建一维数组:
a=numpy.array([1,2,3])
创建多维数组:
b=numpy.array([[1,2,3],[4,5,6]])
如果要改变数组元素的数据类型,可以使用通过设置 dtype,如下所示:
c=numpy.array([2,4,6,8],dtype="数据类型名称")
现在将 c 数组中的元素类型变成了复数类型:
c=numpy.array([2,4,6,8],dtype="complex")
print(c)
[2.+0.j 4.+0.j 6.+0.j 8.+0.j]
array() 是创建 ndarray 对象的基本方法,在后续内容中还会介绍其他方法。
ndim查看数组维数
通过 ndim 可以查看数组的维度:
import numpy as np
arr = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [9, 10, 11, 23]])
print(arr.ndim)
2
您也可以使用 ndim 参数创建不同维度的数组:
#输出一个二维数组
import numpy as np
a = np.array([1, 2, 3,4,5], ndim = 2)
print(a)
reshape数组变维
数组的形状指的是多维数组的行数和列数。Numpy 模块提供 reshape() 函数可以改变多维数组行数和列数,从而达到数组变维的目的。因此数组变维即对数组形状的重塑,如图1所示:
reshape() 函数可以接受一个元组作为参数,用于指定了新数组的行数和列数,示例如下:
import numpy as np
e = np.array([[1,2],[3,4],[5,6]])
print("原数组",e)
e=e.reshape(2,3)
print("新数组",e)
四.NumPy数据类型
序号 | 数据类型 | 语言描述 |
---|---|---|
1 | bool_ | 布尔型数据类型(True 或者 False) |
2 | int_ | 默认整数类型,类似于 C 语言中的 long,取值为 int32 或 int64 |
3 | intc | 和 C 语言的 int 类型一样,一般是 int32 或 int 64 |
4 | intp | 用于索引的整数类型(类似于 C 的 ssize_t,通常为 int32 或 int64) |
5 | int8 | 代表与1字节相同的8位整数。值的范围是-128到127。 |
6 | int16 | 代表 2 字节(16位)的整数。范围是-32768至32767。 |
7 | int32 | 代表 4 字节(32位)整数。范围是-2147483648至2147483647。 |
8 | int64 | 表示 8 字节(64位)整数。范围是-9223372036854775808至9223372036854775807。 |
9 | uint8 | 代表1字节(8位)无符号整数。 |
10 | uint16 | 2 字节(16位)无符号整数。 |
11 | uint32 | 4 字节(32位)的无符号整数。 |
12 | uint64 | 8 字节(64位)的无符号整数。 |
13 | float_ | float64 类型的简写。 |
14 | float16 | 半精度浮点数,包括:1 个符号位,5 个指数位,10个尾数位。 |
15 | float32 | 单精度浮点数,包括:1 个符号位,8 个指数位,23个尾数位。 |
16 | float64 | 双精度浮点数,包括:1 个符号位,11 个指数位,52个尾数位。 |
17 | complex_ | 复数类型,与 complex128 类型相同。 |
18 | complex64 | 表示实部和虚部共享 32 位的复数。 |
19 | complex128 | 表示实部和虚部共享 64 位的复数。 |
20 | str_ | 表示字符串类型 |
21 | string_ | 表示字节串类型 |
数据类型对象
数据类型对象(Data Type Object)又称 dtype 对象,主要用来描述数组元素的数据类型、大小以及字节顺序。同时,它也可以用来创建结构化数据。比如常见的 int64、float32 都是 dtype 对象的实例,其语法格式如下:
np.dtype(object)
创建一个 dtype 对象可以使用下列方法:
a= np.dtype(np.int64)
import numpy as np
a= np.dtype(np.int64)
print(a)
输出结果:
int64
数据类型标识码
NumPy 中每种数据类型都有一个唯一标识的字符码,如下所示:
字符 | 对应类型 |
---|---|
b | 代表布尔型 |
i | 带符号整型 |
u | 无符号整型 |
f | 浮点型 |
c | 复数浮点型 |
m | 时间间隔(timedelta) |
M | datatime(日期时间) |
O | Python对象 |
S,a | 字节串(S)与字符串(a) |
U | Unicode |
V | 原始数据(void) |