【AI Study】第三天,NumPy(3)- 基础知识
NumPy 基础:Python 科学计算的基石
- 【AI Study】第三天,NumPy
- 【AI Study】8-1,同NumPy类似的类库
- 【AI Study】8-2,知识图谱
- 【AI Study】8-3,基础知识
- 【AI Study】8-4,核心功能
- 【AI Study】8-5,高级应用
- 【AI Study】8-6,最佳实践
- 【AI Study】8-7,进阶学习
- 【AI Study】8-8,实用技巧
文章要点
- NumPy 的安装和环境配置方法
- ndarray 数组对象的核心概念和创建方法
- 数组的基本属性和数据类型详解
- 数组的基础操作:索引、切片、变形和拼接
- 实用的代码示例和最佳实践
引言
NumPy(Numerical Python)是 Python 科学计算的基础库,它提供了高性能的多维数组对象和用于处理这些数组的工具。作为数据科学、机器学习和科学计算的基础,掌握 NumPy 对于 Python 开发者来说至关重要。本文将深入探讨 NumPy 的基础知识,帮助读者快速入门并掌握核心概念。
1. 安装与环境配置
1.1 安装 NumPy
NumPy 的安装非常简单,可以通过 pip 包管理器完成:
pip install numpy
对于科学计算环境,建议使用 Anaconda 发行版,它已经预装了 NumPy 和其他科学计算包:
conda install numpy
1.2 导入 NumPy
在 Python 代码中,我们通常使用以下方式导入 NumPy:
import numpy as np
这是 Python 社区的标准做法,使用 np
作为别名可以让我们更简洁地调用 NumPy 函数。
2. 数组基础
2.1 ndarray 对象
NumPy 的核心是 ndarray(n-dimensional array)对象,它是一个多维数组,所有元素都是相同类型的。让我们看看如何创建数组:
# 从列表创建数组
arr1 = np.array([1, 2, 3, 4, 5])
print("从列表创建的数组:", arr1)# 创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print("二维数组:\n", arr2)
2.2 使用特殊函数创建数组
NumPy 提供了多种创建数组的函数:
# 创建全零数组
zeros = np.zeros((3, 3))
print("全零数组:\n", zeros)# 创建全一数组
ones = np.ones((2, 4))
print("全一数组:\n", ones)# 创建等差数列
arange = np.arange(0, 10, 2)
print("等差数列:", arange)# 创建等间距数组
linspace = np.linspace(0, 1, 5)
print("等间距数组:", linspace)# 创建随机数组
random_arr = np.random.rand(3, 3)
print("随机数组:\n", random_arr)
2.3 数组属性
NumPy 数组具有多个重要的属性:
arr = np.array([[1, 2, 3], [4, 5, 6]])print("数组形状:", arr.shape) # 输出: (2, 3)
print("数组维度:", arr.ndim) # 输出: 2
print("数组大小:", arr.size) # 输出: 6
print("数组类型:", arr.dtype) # 输出: int64
print("每个元素字节数:", arr.itemsize) # 输出: 8
print("总字节数:", arr.nbytes) # 输出: 48
2.4 数据类型(dtype)
NumPy 支持多种数据类型,可以根据需要指定:
# 指定数据类型创建数组
arr_int = np.array([1, 2, 3], dtype=np.int32)
arr_float = np.array([1.1, 2.2, 3.3], dtype=np.float64)
arr_complex = np.array([1+2j, 3+4j], dtype=np.complex128)print("整数数组:", arr_int.dtype) # 输出: int32
print("浮点数组:", arr_float.dtype) # 输出: float64
print("复数数组:", arr_complex.dtype) # 输出: complex128
3. 数组操作基础
3.1 索引与切片
NumPy 数组支持多种索引和切片操作:
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 基本索引
print("第一个元素:", arr[0, 0]) # 输出: 1
print("最后一行:", arr[-1]) # 输出: [7 8 9]# 切片操作
print("前两行:", arr[:2]) # 输出: [[1 2 3], [4 5 6]]
print("中间列:", arr[:, 1]) # 输出: [2 5 8]# 布尔索引
mask = arr > 5
print("大于5的元素:", arr[mask]) # 输出: [6 7 8 9]
3.2 数组变形
NumPy 提供了多种数组变形方法:
arr = np.array([1, 2, 3, 4, 5, 6])# 重塑数组
reshaped = arr.reshape(2, 3)
print("重塑后的数组:\n", reshaped)# 展平数组
flattened = arr.flatten()
print("展平后的数组:", flattened)# 转置数组
transposed = reshaped.T
print("转置后的数组:\n", transposed)
3.3 数组拼接与分割
数组的拼接和分割操作:
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])# 水平拼接
hstack = np.hstack((arr1, arr2))
print("水平拼接:", hstack)# 垂直拼接
vstack = np.vstack((arr1, arr2))
print("垂直拼接:\n", vstack)# 数组分割
arr = np.array([1, 2, 3, 4, 5, 6])
split_arr = np.split(arr, 3)
print("分割后的数组:", split_arr)
3.4 数组复制与视图
理解数组的复制和视图操作:
arr = np.array([1, 2, 3, 4, 5])# 视图(浅拷贝)
view = arr.view()
view[0] = 10
print("原数组:", arr) # 输出: [10 2 3 4 5]
print("视图:", view) # 输出: [10 2 3 4 5]# 深拷贝
copy = arr.copy()
copy[0] = 20
print("原数组:", arr) # 输出: [10 2 3 4 5]
print("深拷贝:", copy) # 输出: [20 2 3 4 5]
最佳实践
- 始终使用
np.array()
创建数组,而不是直接使用 Python 列表 - 在创建大型数组时,优先使用 NumPy 的特殊函数(如
zeros()
,ones()
) - 注意数组的数据类型,避免不必要的类型转换
- 使用视图操作时要小心,确保理解其共享内存的特性
- 在进行数组操作时,优先使用 NumPy 的向量化操作而不是循环
总结
本文介绍了 NumPy 的基础知识,包括安装配置、数组创建、属性访问、基本操作等内容。掌握这些基础知识对于后续深入学习 NumPy 的高级特性和应用至关重要。在实际应用中,建议多练习这些基础操作,并注意观察数组的内存使用和性能表现。
参考资源
- NumPy 官方文档
- NumPy 快速入门指南
- Python 数据科学手册