这是继我的上一篇博客
《环境安装血泪史之人工智能劝退篇(anaconda3+cuda10.2+cudnn7.6+tensorflow-gpu2.1.0)win10系统的gpu版》后的关于tensorflow2.0的学习第一篇前奏笔记,要学习机器学习建议先了解以下python有关数据分析的第三方库,这里的推荐课程 中国大学mooc 北京理工大学开设的python数据可视化教程,里面系统讲解了numpy,matplotlib以及pandas库,建议在学习课程前先安装anaconda。
这篇笔记是对mooc所讲numpy库的个人整理,资料来源于 中国大学mooc 北京理工大学开设的python数据可
NumPy是Python编程语言中的一个核心库,专为科学计算设计,特别是在大数据处理和数据分析领域。它提供了一个高效的多维数组对象,名为`ndarray`,以及一系列用于操作这些数组的函数。NumPy的出现极大地提高了Python在数值计算领域的性能,使得科学家和工程师能够用Python进行复杂的数学运算。
让我们深入了解`ndarray`。`ndarray`是NumPy库中的基本数据结构,它可以存储同类型的元素集合,这些元素可以是一维、二维,甚至更高维度的数据。例如,一个一维数组就像一个列表,而二维数组则类似于表格,可以理解为矩阵。数组的每个维度称为轴(axis),轴的数量定义了数组的维度。
创建`ndarray`通常通过numpy的`array()`函数实现,可以传入Python列表或其他序列类型作为参数。例如:
```python
import numpy as np
# 创建一维数组
arr1d = np.array([1, 2, 3, 4])
# 创建二维数组
arr2d = np.array([[1, 2], [3, 4]])
```
数组的形状可以通过`.shape`属性获取,而`.size`属性返回所有元素的总数。数组的索引遵循与Python列表相似的规则,但支持多维索引。
NumPy的广播功能是其强大之处之一。当对不同形状的数组进行操作时,如果它们的形状不匹配,NumPy会尝试通过扩展较小数组的形状来匹配较大数组,这个过程就叫做广播。例如,将一个一维数组与标量相加,NumPy会自动将标量应用于数组的每个元素。
NumPy还提供了大量的数学函数,如线性代数、傅里叶变换和随机数生成。例如,我们可以用`np.linalg`模块进行矩阵运算,`np.fft`模块进行傅里叶变换,`np.random`模块生成各种分布的随机数。
线性代数函数包括矩阵乘法、求逆、行列式、特征值和特征向量等。例如:
```python
import numpy as np
# 矩阵乘法
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
AB = np.dot(A, B)
# 求逆
inv_A = np.linalg.inv(A)
```
傅里叶变换是处理周期性信号和图像分析的重要工具,`np.fft`模块提供了快速傅里叶变换(FFT)等相关函数:
```python
signal = np.sin(np.linspace(0, 2 * np.pi, 100))
fft_signal = np.fft.fft(signal)
```
至于随机数生成,NumPy提供了多种分布的随机数生成,如均匀分布、正态分布等:
```python
random_numbers = np.random.rand(10) # 生成[0, 1)之间的10个随机浮点数
normal_numbers = np.random.randn(10) # 生成标准正态分布的10个随机数
```
NumPy是Python数据科学的基础,它的高效数组操作和丰富的数学函数为处理大数据和进行复杂计算提供了便利。对于想要学习机器学习或数据分析的人来说,掌握NumPy是必不可少的技能。通过结合其他库,如matplotlib和pandas,可以构建出强大的数据分析和可视化流程。因此,建议在深入学习TensorFlow或其他机器学习框架之前,先对NumPy有扎实的理解。