(【数据分析:工具篇】NumPy(1)NumPy介绍)
NumPy介绍
NumPy(Numerical Python)是Python的一个开源的科学计算库,它主要用于处理大规模的多维数组以及矩阵操作。NumPy是在Python中进行科学计算的基础库,许多其他的科学计算库都是基于NumPy进行开发的,包括Scipy、Pandas等。
NumPy是Python中非常重要的科学计算库之一,它提供了丰富的多维数组对象、高效的向量化计算、数组操作、数组切片和索引、广播机制、矩阵计算、随机数生成、通用函数、数学函数和统计函数、数据类型转换等各种强大的功能,可以方便地进行数据处理、科学计算、统计分析和机器学习等任务。如果你想要在Python中进行数据科学或机器学习的任务,那么学习和掌握NumPy是非常有必要的。
NumPy的核心是多维数组(ndarray),它可以用来表示向量、矩阵以及更高维的数组。NumPy中的数组操作都是在底层以C语言的形式实现的,因此它非常高效。
NumPy的安装非常简单,可以通过pip命令来安装,例如:
pip install numpy
安装完成之后,就可以在Python中导入NumPy:
import numpy as np
NumPy的特点
NumPy具有以下特点一些:
- 多维数组对象:NumPy最主要的特点是其多维数组对象ndarray,这种数组可以存储任意类型的数据,并且可以进行高效的数组计算。这种数组可以在一些数据分析和科学计算任务中替代传统的Python列表,因为它的存储和计算效率更高。
- 内置的数据类型:NumPy支持多种数据类型,包括整型、浮点型、复数、布尔型等,可以根据不同的需求进行选择。
- 随机数生成:NumPy中的random模块提供了各种随机数生成函数,例如rand()、randn()、randint()等,可以生成各种不同类型的随机数,这些随机数在模拟、实验和数据分析等任务中都非常有用。
- 数据类型转换:NumPy提供了各种数据类型转换函数,可以将数组从一种数据类型转换成另一种数据类型,例如astype()函数可以将数组的数据类型转换成指定的数据类型,这些函数在数据预处理和清洗中经常使用。
- 方便的数组索引和切片:NumPy支持各种不同的数组切片和索引方式,包括基于整数和布尔值的索引方式,以及基于轴向的索引方式,这使得数据的选择和处理变得更加方便和高效。
- 数组操作:NumPy提供了许多用于操作数组的函数,例如:reshape、concatenate、split、flatten等等。这些函数使得数组的操作变得更加容易和灵活。
- 通用函数:NumPy中的ufunc(通用函数)可以对数组进行逐元素操作,例如exp()、log()、sin()、cos()等等,这些函数在数学计算和科学计算中都经常使用。
- 数学函数和统计函数:NumPy提供了各种数学函数和统计函数,例如sum()、mean()、median()、std()、var()等等,可以方便地计算数组的各种统计量和数学函数值。
- 广播机制:广播机制是NumPy中一种非常重要的特点,它可以使得不同形状的数组进行计算时,它会自动将较小的数组进行复制和扩展,以适应较大的数组形状,避免了显式地进行循环操作,从而使得数组之间的计算变得更加方便和高效。
- 文件输入输出:NumPy提供了各种文件输入输出函数,例如load()、save()、savetxt()等,可以方便地读取和保存多维数组数据,这些函数对于数据分析和机器学习等领域非常有用。
- 快速、高效:NumPy是用C语言编写的,因此可以快速地执行计算,而且在内存使用方面也做了优化,所以处理大型数据集时非常高效。
- 内存管理:NumPy提供了各种内存管理函数和方法,例如reshape()、resize()、flatten()、ravel()等,可以方便地操作数组的形状和大小,避免了不必要的内存分配和拷贝。
- 大数据处理:NumPy中的数组可以处理大量的数据,因为它使用了连续的内存块,所以可以高效地处理大型数据集。
- 高效的向量化计算:NumPy支持向量化计算,即在数组上进行运算,而不是在单个元素上进行计算,这种运算方式非常高效,并且可以利用现代CPU的并行计算能力。因此,如果你需要进行数组计算或矩阵计算,那么NumPy是一个非常好的选择。
- 矩阵计算:除了多维数组的支持之外,NumPy还提供了矩阵计算相关的函数和方法,例如dot()函数可以实现矩阵乘法运算。这些函数和方法在科学计算和机器学习等领域中经常被使用。
- 可以与其他科学计算库配合使用:NumPy与其他许多Python科学计算库(如SciPy、Pandas、Matplotlib等)兼容性良好,可以方便地与它们进行集成,实现更加复杂的科学计算任务。
- 可视化:NumPy可以通过与Matplotlib等可视化库的集成,实现数据可视化。
- 可扩展性:NumPy的底层代码是用C和Fortran编写的,可以通过Cython等工具将Python代码转换为C代码,从而提高代码的性能。
- 开源和免费:NumPy是开源和免费的软件,可以在任何操作系统上使用,并且可以*地修改和分发。
数组的基本操作
创建数组
可以使用NumPy中的array
函数来创建数组,例如:
a = np.array([1, 2, 3])
print(a)
输出结果为:
[1 2 3]
可以使用dtype
参数来指定数组的数据类型:
b = np.array([1, 2, 3], dtype=float)
print(b)
输出结果为:
[1. 2. 3.]
可以使用zeros
、ones
、empty
等函数来创建特定形状的数组。
np.zeros
是NumPy中用于创建指定形状的全0数组的函数。
np.zeros
的基本语法如下:
np.zeros(shape, dtype=float, order='C')
其中,参数解释如下:
-
shape
:数组的形状,可以是一个整数表示一维数组,或者一个元组表示多维数组。 -
dtype
:可选参数,指定数组的数据类型,默认为float
。 -
order
:可选参数,指定数组在内存中的存储顺序,可以是'C'
(按行存储)或者'F'
(按列存储),默认为'C'
。
c = np.zeros((2, 3))
print(c)
输出结果为:
[[0. 0. 0.]
[0. 0. 0.]]
np.ones
是NumPy中用于创建指定形状的全1数组的函数。
np.ones
的基本语法如下:
np.ones(shape, dtype=float, order='C')
其中,参数解释如下:
-
shape
:数组的形状,可以是一个整数表示一维数组,或者一个元组表示多维数组。 -
dtype
:可选参数,指定数组的数据类型,默认为float
。 -
order
:可选参数,指定数组在内存中的存储顺序,可以是'C'
(按行存储)或者'F'
(按列存储),默认为'C'
。
d = np.ones((2, 3))
print(d)
输出结果为:
[[1. 1. 1.]
[1. 1. 1.]]
生成随机数。使用np.empty()
生成的数组并不会被初始化为任何特定的值,因此数组的内容是未知的,可能包含任何值。
e = np.empty((2, 3), dtype=np.float64)
print(e)
输出结果为:
[[6.23042070e-307 3.56043053e-307 1.37961641e-306]
[2.22518251e-306 1.33511969e-306 1.24610383e-306]]
索引和切片
可以使用整数索引和切片来访问数组中的元素,例如:
a = np.array([1, 2, 3, 4, 5])
print(a[0])
print(a[1:3])
输出结果为:
1
[2 3]
可以使用多维索引和切片来访问多维数组中的元素,例如:
b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(b[0, 0])
print(b[1:3, 1:3])
输出结果为:
1
[[5 6]
[8 9]]
数组运算
可以使用NumPy中的各种函数来对数组进行运算,例如:
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)
print(a - b)
print(a * b)
print(a / b)
输出结果为:
[5 7 9]
[-3 -3 -3]
[ 4 10 18]
[0.25 0.4 0.5 ]
可以使用各种函数来对数组进行操作,例如:
a = np.array([1, 2, 3])
print(np.sqrt(a))
print(np.exp(a))
print(np.sin(a))
输出结果为:
[1. 1.41421356 1.73205081]
[ 2.71828183 7.3890561 20.08553692]
[0.84147098 0.90929743 0.14112001]
可以使用dot
函数来进行矩阵乘法运算,例如:
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(np.dot(a, b))
输出结果为:
[[19 22]
[43 50]]
总结
NumPy是Python中非常重要的科学计算库之一,它提供了丰富的多维数组对象、高效的向量化计算、数组操作、数组切片和索引、广播机制、矩阵计算、随机数生成、通用函数、数学函数和统计函数、数据类型转换等各种强大的功能,可以方便地进行数据处理、科学计算、统计分析和机器学习等任务。如果你想要在Python中进行数据科学或机器学习的任务,那么学习和掌握NumPy是非常有必要的。