2.1 numpy介绍
numpy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/O 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。
numpy的部分功能如下:
- ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
- 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
- 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
- 用于集成由C、C++、Fortran等语言编写的代码的API。
为什么需要Numpy?
Python # 原生Python列表 vs NumPy数组性能对比 import time import numpy as np
py_list = list(range(1000000)) np_arr = np.arange(1000000)
# 计算平方和 start = time.time() sum([x**2 for x in py_list]) print(f"Python列表耗时: {time.time()-start:.4f}s")
start = time.time() np.sum(np_arr**2) print(f"NumPy数组耗时: {time.time()-start:.4f}s") |
输出示例:
Plain Text Python列表耗时: 0.1256s NumPy数组耗时: 0.0023s |
安装numpy包
如果在Pycharm中加载不出来,可以通过如下命令安装
Python C:\Users\fuxiaofeng>conda activate python-2025-conda (python-2025-conda) C:\Users\fuxiaofeng>conda install numpy 2.1 numpy介绍 numpy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/O 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 numpy的部分功能如下: - ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
- 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
- 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
- 用于集成由C、C++、Fortran等语言编写的代码的API。
为什么需要Numpy? Python # 原生Python列表 vs NumPy数组性能对比 import time import numpy as np
py_list = list(range(1000000)) np_arr = np.arange(1000000)
# 计算平方和 start = time.time() sum([x**2 for x in py_list]) print(f"Python列表耗时: {time.time()-start:.4f}s")
start = time.time() np.sum(np_arr**2) print(f"NumPy数组耗时: {time.time()-start:.4f}s") |
输出示例: Plain Text Python列表耗时: 0.1256s NumPy数组耗时: 0.0023s |
安装numpy 
如果在Pycharm中加载不出来,可以通过如下命令安装 Python C:\Users\fuxiaofeng>conda activate python-2025-conda (python-2025-conda) C:\Users\fuxiaofeng>conda install numpy 2.1 numpy介绍 numpy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象、各种派生对象(例如掩码数组和矩阵)以及用于对数组进行快速操作的各种方法,包括数学、逻辑、形状操作、排序、选择、I/O 、离散傅里叶变换、基本线性代数、基本统计运算、随机模拟等等。 numpy的部分功能如下: - ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
- 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。
- 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
- 用于集成由C、C++、Fortran等语言编写的代码的API。
为什么需要Numpy? Python # 原生Python列表 vs NumPy数组性能对比 import time import numpy as np
py_list = list(range(1000000)) np_arr = np.arange(1000000)
# 计算平方和 start = time.time() sum([x**2 for x in py_list]) print(f"Python列表耗时: {time.time()-start:.4f}s")
start = time.time() np.sum(np_arr**2) print(f"NumPy数组耗时: {time.time()-start:.4f}s") |
输出示例: Plain Text Python列表耗时: 0.1256s NumPy数组耗时: 0.0023 |
darray 2.2.1 ndarray 的核心特性 - 多维性:支持 0 维(标量)、1 维(向量)、2 维(矩阵)及更高维数组。
- 同质性:所有元素类型必须一致(通过 dtype 指定)。
- 高效性:基于连续内存块存储,支持向量化运算。
2.2.2 ndarray的属性 核心属性(必须掌握) (假设 arr = np.array([[1, 2], [3, 4]])) 属性名称 | 通俗解释 | 使用示例 | 输出结果 | 实际用途 | shape | 数组的形状:行数和列数(或更高维度的尺寸)。 | arr.shape | (2, 2) | 查看或调整数组结构(如变形)。 | ndim | 维度数量:数组是几维的(1维、2维、3维等)。 | arr.ndim | 2 | 判断数组是向量、矩阵还是高维数据。 | size | 总元素个数:数组中所有元素的总数。 | arr.size | 4 | 快速计算元素总量。 | dtype | 元素类型:数组中元素的类型(整数、浮点数等)。 | arr.dtype | int64(或 int32) | 确保计算时类型一致(如避免整数除法问题)。 |
- shape:就像问数组“长什么样”。
- 示例:arr = np.array([[1, 2], [3, 4]]) 的 shape 是 (2, 2),表示2行2列。
- 变形操作:arr.reshape(4, 1) 会变成4行1列的数组。
- ndim:判断数组是“几维空间”。
- 一维数组(向量):ndim=1,如 [1, 2, 3]。
- 三维数组(立体):ndim=3,如RGB图片数据。
- dtype:确保所有元素是“同一类型”。
- 如果数组中有小数,dtype 会自动变成 float64(避免精度丢失)。
- 强制指定类型:np.array([1, 2], dtype=np.float32)。
Python import numpy as np
# 创建一个3x2的二维数组 arr = np.array([[1, 2], [3, 4], [5, 6]])
print("形状 shape:", arr.shape) # 输出 (3, 2) print("维度 ndim:", arr.ndim) # 输出 2 print("总元素 size:", arr.size) # 输出 6 print("元素类型 dtype:", arr.dtype) # 输出 int64 |
进阶属性(了解即可) 属性名称 | 通俗解释 | 示例代码 | 输出结果 | 应用场景 | T | 转置:行变列,列变行。 | arr.T | [[1, 3], [2, 4]] | 矩阵运算(如矩阵乘法)。 | itemsize | 单个元素占用的内存字节数。 | arr.itemsize | 8(int64 类型占8字节) | 优化内存占用时参考。 | nbytes | 数组总内存占用量:size * itemsize。 | arr.nbytes | 32(4元素 × 8字节) | 处理大数据时监控内存消耗。 | flags | 内存存储方式:是否连续存储(高级优化)。 | arr.flags | C_CONTIGUOUS : True 等 | 高性能计算或底层内存操作。 |
|
|
练习题
题目 1:观察数组形状
Python import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6]]) |
- arr.shape 的输出是什么?
- arr.ndim 的值是多少?
- arr.size 的结果是什么?
答案
- (2, 3)
- 2(二维数组)
- 6(总元素数:2行×3列=6)
题目 2:数据类型推断
以下数组的 dtype 分别是什么?
- np.array([1, 2, 3])
- np.array([1.0, 2, 3])
- np.array(["apple", "banana"])
答案
- int64(默认整数类型)
- float64(包含浮点数,自动提升为浮点类型)
- <U6(Unicode 字符串,长度 6)
题目 3:内存占用计算
Python arr = np.array([[0, 1], [2, 3]], dtype=np.int32) |
- arr.itemsize 的值是多少?
- arr.nbytes 的结果是多少?
答案
- 4(int32 类型占 4 字节)
- 8(总字节数:4元素×4字节=16 → 注:原题应为 4 元素?需要检查数组大小)
(更正:数组是 2x2,共 4 元素。nbytes = 4 × 4 = 16,原题可能有误)
题目 4:转置操作
Python arr = np.array([[1, 2], [3, 4], [5, 6]]) |
- 写出 arr.T 的输出。
- 转置后的 shape 是什么?
答案
Plain Text [[1 3 5] [2 4 6]] |
(2, 3)(原数组是 3x2,转置后为 2x3)。