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
相关推荐
至乐活着3 小时前
Python异步编程asyncio完全指南:从入门到高性能实战
python·并发·协程·asyncio·异步编程
Niuguangshuo3 小时前
LangChain学习之旅(三):用Memory赋予模型记忆
学习·langchain
H__Rick3 小时前
C51学习-DAY8
单片机·嵌入式硬件·学习
functionflux3 小时前
kafka-python:Python 生态中最成熟的 Kafka 客户端
分布式·python·其他·kafka
帅小伙―苏3 小时前
239. 滑动窗口最大值
python·力扣
爱吃苹果的梨叔3 小时前
2026年KVM over IP采购指南:BIOS级接管、并发和审计怎么验收
ide·python·tcp/ip·github
Cloud_Shy6183 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第六章 Item 40 - 43)
android·开发语言·人工智能·笔记·python·学习方法
装不满的克莱因瓶3 小时前
掌握生成对抗网络(GAN)的优化目标与评估指标——从博弈函数到生成质量衡量体系
人工智能·python·深度学习·算法·机器学习
半只小闲鱼4 小时前
配置计划模块通用办公设备家具批复数合计计算
开发语言·python
是阿千呀!4 小时前
A股市场风格切换研究:基于 Barra 风险模型的量化框架
python·量化