Numpy常用方法指南

Numpy常用方法指南

Numpy是Python数据科学的基石。Pandas、SciPy、Scikit-learn等顶级库都建立在Numpy之上。它提供了高性能的多维数组对象和丰富的数学函数,是数据处理、特征工程、模型输入的必备工具。

创建数组(array creation)

import numpy as np

# 从列表创建
arr1 = np.array([1,2,3,4,5])

# 全零/全一/单位矩阵
zeros = np.zeros((3,4))		# 3行4列全0
ones = np.ones((2,3))		# 2行3列全1
eye = np.eye(5)				# 5×5单位矩阵

# 等间隔序列
range_arr = np.arange(0,10,2)		# [0,2,4,6,8]
lin_arr = np.linspace(0,1,5)		# [0,0.25,0.5,0.75,1]

# 随机数组
rand_uniform = np.random.rand(3,3)		# [0,1)均匀分布
rand_normal = np.random.randn(3,3)		# 标准正态分布
rand_int = np.random.randint(0,10,(2,5))	# 随机整数

# 重复/平铺
repeat_arr = np.repeat([1,2],3)		# [1,1,1,2,2,2]
title_arr = np.title([1,2],3)		# [1,2,1,2,1,2]

数组属性

arr = np.random.rand(4,5)

print(arr.shape)		# (4,5)维度形状
print(arr.ndim)			# 2  轴的数量(秩)
print(arr.size)			# 20  元素总数
print(arr.dtype)		# float64 数据类型
print(arr.nbytes)		# 占用字节数

索引和切片(核心操作)

arr = np.arange(10)

# 一维切片(与列表类似)
arr[2:7:2]			# 从索引2到6,步长2
arr[::-1]			# 反转

# 二维数组
mat = np.array([[1,2,3],[4,5,6],[7,8,9]])
mat[0,2]		# 第0行第2列 -> 3
mat[1]			# 第1行全部 -> [4,5,6]
mat[:,1]		# 第1列全部 -> [2,5,8]
mat[0:2,1:3]	# 行0-1,列1-2

# 布尔索引 (数据分析常用)
data = np.random.randn(10)
data[data > 0]		# 选出所有正数
data[(data > -0.5) & (data < 0.5)]

# 花式索引 (按整数数组取)
arr = np.arange(10)
arr[[3,5,7]]		# 取索引3,5,7的元素

数组运算(向量化)

a = np.array([1,2,3])
b = np.array([4,5,6])

# 算术运算 (逐元素)
a + b		# [5,7,9]
a * b		# [4,10,18]
a ** 2		# [1,4,9]
np.sqrt(a)	# [1,1.414,1.732]

# 矩阵乘法
A = np.random.rand(3,4)
B = np.random.rand(4,5)
C = A @ B			# 现代写法
C = np.dot(A,B)		# 传统写法

# 广播自动扩展维度
arr = np.ones((3,3))
arr + np.array([1,2,3])		# 每行加[1,2,3]

通用函数

arr = np.array([-1,2,-3,4])

np.abs(arr)		# 绝对值
np.exp(arr)		# 指数
np.log(arr + 4)	 # 自然对数 (避免负数)
np.log10(arr+5)
np.sin(arr)		# 三角函数
np.floor(np.array([1.2,2.9]))	# 向下取整
np.ceil([1.2,2.9])		# 向上取整
np.round([1.234,2.567],2)	# 四舍五入到两位小数

统计方法(数据分析核心)

data = np.random.randn(100,5)	# 100行5列(样本x特征)

# 基本统计量
data.mean()		# 全局均值
data.mean(axis=0)		# 每列均值(特征均值)
data.mean(axis=1)		# 每行均值(样本均值)

data.sum()
data.std()		# 标准差
data.var()		# 方差
data.min(),data.max()
data.argmin(axis=0)		# 每列最小值所在行索引
data.cumsum()			# 累加和
data.cumprod()			# 累成积

# 中位数、分位数
np.median(data,axis=0)
np.percentile(data,25,axis=0)		# 第25百分位

# 相关系数矩阵
np.corrcoef(data.T)		# 传入特征为行,所以转置

形状操作

arr = np.arange(12)
mat = np.arange(54).reshape(6,9)

# 改变形状
arr.reshape(3,4)
arr.reshape(4,-1)		# -1表示自动推断

# 展平
arr.flatten()			# 返回副本
arr.ravel()				# 返回视图(效率高)

# 拼接
a = np.array([[1,2],[3,4]])
b = np.array([[5,6]])
np.vstack((a,b))		# 垂直堆叠(增加行)
np.hstack((a,a))		# 水平堆叠(增加列)
np.concatenate([a,a],axis=0)

# 分割
np.split(arr,3)			# 等分为3份
np.vsplit(mat,3)		# 垂直分割
np.hsplit(mat,3)		# 水平分割

唯一值与集合逻辑

arr = np.array([1,2,1,3,2,4,1])

np.unique(arr)			# 【1,2,3,4】
np.unique(arr,return_counts=True)		# 同时返回频数

# 集合操作
a = np.array([1,2,3,4])
b = np.array([3,4,5,6])
np.intersectld(a,b)		# 交集 【3,4】
np.unionld(a,b)			# 并集 【1,2,3,4,5,6】
np.setdiffld(a,b)		# 差集 【1.2】
np.inld(a,b)			# 检查a中元素是否在b中 -> [Flase,False,True,True]

缺失值处理

# 创建含NaN的数组
arr = np.array([1,np.nan,3,np.nan,5])

# 判断缺失
np.isnan(arr)			# [False,True,False,True,False]

# 统计时跳过NaN
np.nanmean(arr)			# 均值忽略NaN
np.nanstd(arr)
np.nansum(arr)

# 填充缺失
arr[np.isnan(arr)] = 0		# 将NaN替换为0

线性代数常用操作

A = np.random.rand(3,3)
B = np.random.rand(3,3)

np.linalg.inv(A)		# 逆矩阵
np.linalg.det(A)		# 行列式
np.linalg.matrix_rank(A)	# 矩阵秩
np.trace(A)				# 迹(对角线之和)

# 特征值与特征向量
eigvals,eigvecs = np.linalg.eig(A)

# 解线性方程组 Ax = b
b = np.array([1,2,3])
x = np.linalg.solve(A,b)

随机数生成

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

# 常见分布
np.random.uniform(0,1,100)		# 均匀分布
np.random.normal(0,1,100)		# 正态分布(均值,标准差,数量)
np.random.binomial(10,0.5,100)	# 二项分布(试验次数,成功概率,数量)
np.random.poisson(3,100)		# 泊松分布

# 随机打乱
arr = np.arange(10)
np.random.shuffle(arr)			# 原地打乱

# 随机抽样
np.random.choice(10,5,replace=False)	# 从0-9不重复抽5个

保存与加载

# 二进制格式
np.save('my_array.npy',arr)
loaded = np.load('my_array.npy')

# 压缩存储多个数据
np.savez('array.npz',arr1=arr1,arr2=arr2)
data = np.load('arrays.npz')
data['arr1']

# 文本格式(可读,速度慢)
np.savetxt('data.csv',arr,delimiter=',')
csv_arr = np.loadtxt('data.csv',delimiter=',')

对于数据分析师,Numpy是处理数值数据的高性能基础工具。掌握常用方法后可以:快速加载、转换数据;执行描述性统计和简单线性代数运算;为机器学习模型准备特征矩阵。

不建议死记硬背,边用边查,孰能生巧。希望这篇博客可以当作你的Numpy速查手册!

posted @ 2026-06-10 23:04  稀碎,  阅读(2)  评论(0)    收藏  举报