Python NumPy 学习

一、安装与导入

1. 安装

复制代码
# pip安装
pip install numpy
# conda安装(anaconda环境)
conda install numpy

2. 导入(行业统一规范别名 np)NumPy

复制代码
import numpy as np
# 查看版本
print(np.__version__)

二、ndarray 数组基础(核心对象,同类型连续内存,运算远快原生 list)

2.1 数组创建 5 种常用方式

复制代码
# 1.从Python列表创建一维/二维数组
arr1 = np.array([1,2,3,4])                # 一维
arr2 = np.array([[1,2],[3,4],[5,6]])      # 二维(3行2列)

# 2.快速生成固定值数组
zero = np.zeros((3,4))    # 3行4列全0浮点数组
one = np.ones((2,3))      # 2行3列全1
full = np.full((2,2), 8)  # 2×2全部填充8

# 3.等差数组(左闭右开)
ar1 = np.arange(0,10,2)   # [0 2 4 6 8] 起始,终止,步长
ar2 = np.linspace(1,10,5) # [1. 3.25 5.5 7.75 10.] 均分5个点

# 4.生成和原数组同形状数组
arr = np.array([[1,2],[3,4]])
zero_like = np.zeros_like(arr)

# 5.空数组(只开辟内存不赋值)
empty = np.empty((2,3))

2.2 ndarray 五大核心属性

复制代码
arr = np.array([[1,2,3],[4,5,6]])
print(arr.ndim)    # 维度:2
print(arr.shape)   # 形状:(2,3) 行,列
print(arr.size)    # 总元素数:6
print(arr.dtype)   # 元素数据类型:int64/float64
print(arr.itemsize)# 单个元素字节数

2.3 指定数据类型 dtype

复制代码
# 指定int32/float32,节省内存
arr_int = np.array([1,2,3], dtype=np.int32)
arr_float = np.array([1,2], dtype=np.float32)
# 类型转换
arr = arr_int.astype(np.float64)

三、索引与切片(重点)

3.1 一维数组

复制代码
a = np.array([0,1,2,3,4,5])
print(a[2])       # 单个取值:2
print(a[1:4])     # 切片[1,2,3] 左闭右开
print(a[::2])     # 步长2 [0,2,4]
print(a[::-1])    # 反转数组

3.2 二维数组(行,列)

复制代码
b = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(b[0,1])        # 第0行第1列:2
print(b[1:3,:])      # 第1、2行,所有列
print(b[:, 0])       # 全部行,第0列
print(b[0:2,1:3])    # 前两行,后两列

3.3 布尔索引(条件筛选)

复制代码
arr = np.array([1,5,3,8,2])
mask = arr>3        # [False True False True False]
res = arr[mask]      # [5,8] 取出大于3的元素

3.4 花式索引

复制代码
arr = np.array([10,20,30,40])
print(arr[[0,2,3]]) # 指定下标取值 [10,30,40]

四、数组变形、拼接、拆分

4.1 形状变换 reshape

复制代码
arr = np.arange(6)
arr2 = arr.reshape(2,3) # 一维→2行3列
# 展平为一维
arr.flatten()   # 返回新数组
arr.ravel()     # 尽量返回原数组视图

4.2 数组拼接(vstack/hstack/concatenate)

复制代码
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])

np.vstack([a,b])    # 竖直上下拼接(行增加)
np.hstack([a,b])    # 水平左右拼接(列增加)
# axis=0竖直,axis=1水平
np.concatenate([a,b],axis=0)

4.3 数组拆分 split

复制代码
arr = np.arange(9).reshape(3,3)
res = np.split(arr,3,axis=0) # 按行切3份

4.4 新增维度 newaxis

复制代码
arr = np.array([1,2,3]) # (3,)
arr_row = arr[np.newaxis,:] # (1,3)行向量
arr_col = arr[:,np.newaxis] # (3,1)列向量

五、数组运算(向量化,无需 for 循环)

5.1 标量运算(数组和单个数字)

复制代码
arr = np.array([1,2,3])
print(arr+2) # [3,4,5]
print(arr*3) # [3,6,9]
print(arr**2)# [1,4,9]

5.2 同形状数组逐元素运算

复制代码
a = np.array([1,2])
b = np.array([3,4])
print(a+b,a-b,a*b,a/b) # 加减乘除都是逐元素

⚠️ *是逐元素相乘,矩阵乘法用 @ /np.dot ()

复制代码
m1 = np.array([[1,2],[3,4]])
m2 = np.array([[5,6],[7,8]])
res = m1 @ m2  # 矩阵乘法
res2 = np.dot(m1,m2)

5.3 常用数学函数(逐元素)

复制代码
arr = np.array([1,4,9])
np.sqrt(arr)   # 开方
np.exp(arr)    # e^x
np.log(arr)    # ln
np.sin(arr)    # 正弦
np.abs(arr)    # 绝对值
np.round(arr,2)# 四舍五入

六、广播机制(NumPy 核心难点:不同 shape 数组自动运算)

规则:维度从右往左对齐,缺的维度补 1;维度为 1 可自动拓展匹配

复制代码
# 例1:(3,1) + (1,4) → (3,4)
a = np.array([[1],[2],[3]]) # (3,1)
b = np.array([10,20,30,40])# (4,)→(1,4)
print(a+b)

# 例2:数组+标量本质是广播
arr = np.array([1,2,3])
arr + 5

七、统计聚合函数(axis 控制行列运算,axis=0 列方向、axis=1 行方向)

复制代码
arr = np.array([[1,2,3],[4,5,6]])
print(np.sum(arr))        # 全部求和:21
print(np.sum(arr,axis=0)) # 按列求和 [5,7,9]
print(np.sum(arr,axis=1)) # 按行求和 [6,15]

# 其他统计
np.mean(arr)    # 平均值
np.max(arr)     # 最大值
np.min(arr)     # 最小值
np.median(arr)  # 中位数
np.var(arr)     # 方差
np.std(arr)     # 标准差
np.argmax(arr)  # 最大值下标
np.argmin(arr)  # 最小值下标

八、随机数 np.random 模块

复制代码
# 固定随机种子,结果可复现
np.random.seed(42)

# 1.0~1均匀分布
r1 = np.random.rand(3,2)
# 2.正态分布(均值0,方差1)
r2 = np.random.randn(2,3)
# 3.整数随机数 [low,high)
r3 = np.random.randint(1,10,size=(3,3))
# 4.随机打乱数组
arr = np.array([1,2,3,4])
np.random.shuffle(arr)

九、文件 IO:数组保存与读取

复制代码
arr = np.array([[1,2],[3,4]])
# 保存二进制npy
np.save("data.npy", arr)
data = np.load("data.npy")

# 读写csv文本
np.savetxt("data.csv", arr, delimiter=",")
data_csv = np.loadtxt("data.csv", delimiter=",")

十、高频实用函数

复制代码
# 1.去重
arr = np.array([1,1,2,3,3,3])
unique = np.unique(arr) # [1,2,3]

# 2.非零元素统计
np.count_nonzero(arr>2)

# 3.查找非零下标
np.argwhere(arr>2)

# 4.替换:条件赋值
arr[arr<2]=0

十一、实战小案例:归一化数据

复制代码
# 把数据缩放到[0,1]
data = np.array([10,20,30,40,50])
norm = (data - np.min(data))/(np.max(data)-np.min(data))
print(norm)

十二、速查清单(备忘)

分类 常用 API
创建 array/zeros/ones/full/arange/linspace
变形 reshape/flatten/ravel/newaxis
拼接 vstack/hstack/concatenate
运算 +-*/ @ dot sqrt exp log
统计 sum/mean/max/min/std/argmax
随机 rand/randn/randint/seed/shuffle
相关推荐
用户8356290780517 小时前
Python 实现 PDF 文件加密与解密方法
后端·python
用户8356290780517 小时前
使用 Python 冻结与拆分 Excel 窗格教程
后端·python
你好潘先生15 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
Agent_大师16 小时前
WebSocket 行情重连成功,K线缺口不会自动消失
python
荣码16 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
copyer_xyf16 小时前
FastAPI 如何连接 MySQL
后端·python
apocelipes1 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
用户8356290780511 天前
使用 Python 在 PDF 中创建与管理书签
后端·python
MeixianAgent1 天前
Python 回测数据入口怎么验?历史 K 线入库前先做 5 个检查
后端·python
咕白m6252 天前
用 Python 实现一键批量查找与替换 Excel 数据
后端·python