让我们深入了解一下 NumPy。NumPy 是 Python 中用于科学计算和数据分析的基础库之一。它提供了高效的多维数组对象 ndarray,以及许多用于数组计算、线性代数、傅里叶变换等方面的函数和工具。
安装 NumPy
首先,我们需要安装 NumPy 库。可以使用 pip 工具来完成安装:
pip install numpy
安装完成后,即可在 Python 脚本中导入 NumPy 库:
import numpy as np
创建 ndarray
在 NumPy 中,最重要的数据结构是 ndarray(N-dimensional array)。ndarray 是一个多维数组对象,由相同类型的元素组成。以下是创建 ndarray 的几种常见方式。
使用 array() 函数创建
可以使用 array() 函数来创建一个 ndarray。该函数接受一个序列(例如列表或元组)作为输入,并返回一个新的包含指定序列数据的 ndarry 对象。
python
import numpy as np
a = np.array([1, 2, 3])
print(a) # 输出:[1 2 3]
array() 函数还可以接受一个 dtype 参数,用于指定返回的 ndarry 对象中元素的类型:
python
import numpy as np
a = np.array([1, 2, 3], dtype=float)
print(a) # 输出:[1. 2. 3.]
使用 arange() 函数创建
arange() 函数类似于 Python 内置函数 range(),但它返回的是一个 ndarray 对象而不是列表。该函数接受三个参数:起始值(默认为0)、结束值(不包括)、步长(默认为1)。
python
import numpy as np
a = np.arange(0, 10, 2)
print(a) # 输出:[0 2 4 6 8]
使用 linspace() 函数创建
linspace() 函数用于创建等间隔数列。该函数接受三个参数:起始值、结束值、元素个数。
python
import numpy as np
a = np.linspace(0, 10, num=5)
print(a) # 输出:[0.  2.5  5.  7.5 10. ]
使用 zeros() 和 ones() 函数创建
zeros() 和 ones() 函数分别用于创建全零和全一矩阵。这两个函数都接受一个表示矩阵形状的元组作为输入参数。
python
linspace numpyimport numpy as np
a = np.zeros((3,3))
print(a) # 输出:
# [[0. 0. 0.]
# [0. 0. 0.]
# [0. 0. 0.]]
b = np.ones((2,4))
print(b) # 输出:
# [[1., 1., 1., 1.],
# [1., 1., 1., 1.]]
c = np.eye(3)
print(c) # 输出:
# [[1., 0., 0.],
# [0., 1., 0.],
# [0., 0., 1.]]
d = np.diag([2,4,6])
print(d) # 输出:
# [[2, 0, 0],
# [0, 4, 0],
# [0, 0, 6]]
数组属性与操作
在 NumPy 中,ndarray 具有许多属性和操作,下面介绍其中几个常见的属性和操作。
数组形状与大小
ndarray 对象有两个重要属性 shape 和 size 分别表示其形状和大小:
python
import numpy as np
a = np.array([[1,2],[3,4]])
print(a.shape) # 输出:(2,2)
b = a.reshape((4,))
print(b.shape) # 输出:(4,)
size 属性表示数组中元素总数:
python
import numpy as np
a = np.array([[1,2],[3,4]])print(a.size) # 输出:12
### 数组索引和切片与 Python 列表一样,ndarray 对象也可以通过索引和切片来访问其中的元素。但是,由于 ndarray 是多维数组对象,因此其索引和切片方式也有所不同。#### 索引对于一维数组,可以使用类似列表的方式来进行索引:
import numpy as npa = np.array([1, 2, 3])print(a[0]) # 输出:1
对于多维数组,则需要指定每个轴上的索引值:
pythonimport numpy as npa = np.array([[1, 2], [3, 4]])print(a[0, 0]) # 输出:1
#### 切片对于一维数组,切片方式与列表相同:
pythonimport numpy as npa = np.array([1, 2, 3])print(a[:2]) # 输出:[1 2]
对于多维数组,则需要在每个轴上指定要取得的范围:
pythonimport numpy as npa = np.array([[1, 2], [3, 4], [5, 6]])print(a[:2,:1]) # 输出:# [[1]# [3]]
### 数组运算在 NumPy 中,ndarray 对象支持基本的数学运算符(如 +、-、* 和 /)以及其他操作(如矩阵乘法)。这些运算符都是按元素执行的。
pythonimport numpy as npa = np.array([1, 2, 3])b = np.array([4, 5, 6])c = a + b d = a * b e = a.dot(b)print(c) # 输出:[5 7 9]print(d) # 输出:[4 10 18]print(e) # 输出:32
除了逐元素计算之外,NumPy 还提供了许多函数用于处理 ndarry 对象。例如 sum() 函数可用于计算所有元素的总和:
pythonimport numpy as npa = np.array([1, 2, 3])b = a.sum()print(b) # 输出:6
## 广播机制广播机制(broadcasting)是 NumPy 中一个非常强大的功能。它允许不同形状的数组进行数学运算而无需复制数据。简单地说,广播机制会自动扩展维度较小的数组,并将其重复以匹配另一个较大数组。例如,在以下示例中,我们将一个标量加到一个二维矩阵中:
pythonimport numpy as npa = np.ones((3,3))b = a + 3 print(b)# 输出:# [[4. 4. 4.]# [4. 4. 4.]# [4. 4. 4.]]
在这里,标量值被扩展为一个形状与 a 相同的二维矩阵,并且两个矩阵相加得到结果 b。## 线性代数运算NumPy 提供了许多用于线性代数计算的函数和工具。下面介绍几个常见的线性代数运算。### 点积(内积)点积是两个向量之间进行乘法运算并求和得到结果。在 NumPy 中可以使用 dot() 函数来计算点积。
pythonimport numpy as npa = [1,2]b = [3,4]c = np.dot(a,b)print(c) # 输出:11
求逆矩阵、行列式和特征值等操作NumPy 还提供了许多其他线性代数相关的函数和工具,包括求逆矩阵、行列式、特征值等操作。这些函数都在 linalg 模块中。
import numpy as np
a = np.array([[1,2],[3,4]])
求逆矩阵
b = np.linalg.inv(a)print(b) # 输出:
[[-2. 1. ]
[ 1.5 -0.5]]
求行列式c = np.linalg.det(a)print©
输出:-2.0
求特征值和特征向量
d, e = np.linalg.eig(a)
print(d) # 输出:[-0.37228132 5.37228132]
print(e)
输出:
[[-0.82456484 -0.41597356]
[ 0.56576746 -0.90937671]]
本文介绍了 NumPy 的基础知识,包括如何安装和导入库、如何创建 ndarray 数组、数组属性和操作、数组运算、广播机制以及线性代数运算等内容。NumPy 是 Python 中用于科学计算和数据分析的重要基础库之一,掌握其基础知识对于进行数据处理和分析非常有帮助。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。