NumPy 核心函数详解-超全(理论+实操举例+结果展示)

1. 数组统计运算 (Stats)

理论部分

函数名作用关键参数 (axis) 说明
sum()计算元素总和axis=0 (列和), axis=1 (行和)
mean()计算算术平均值同上
min() / max()返回最小/最大值同上
argmin() / argmax()返回最小/最大值的索引同上(默认展平计算)
cumsum()计算累积和默认展平计算
cumprod()计算累积积默认展平计算
std()计算标准差衡量数据离散程度
var()计算方差标准差的平方

实操代码

import numpy as np

# --- 准备数据 ---
# 创建一个 2x3 的二维数组
arr = np.array([[1, 2, 3],
                [4, 5, 6]])
print("【原始数组】\n", arr)
print("-" * 30)

# 1. 基础统计:和、均值、最大/最小值
print("1. sum (总和):", arr.sum())
print("2. mean (均值):", arr.mean())
print("3. max (最大值):", arr.max())
print("4. min (最小值):", arr.min())

# 2. 索引查找:找位置
# 展平后数组为 [1, 2, 3, 4, 5, 6]
print("5. argmax (最大值索引):", arr.argmax()) # 输出 5 (对应元素6的位置)
print("6. argmin (最小值索引):", arr.argmin()) # 输出 0 (对应元素1的位置)

# 3. 累积运算
print("7. cumsum (累积和):", arr.cumsum())
# 解释:1, 1+2, 1+2+3, 1+2+3+4... => [1, 3, 6, 10, 15, 21]
print("8. cumprod (累积积):", arr.cumprod())
# 解释:1, 1*2, 1*2*3... => [1, 2, 6, 24, 120, 720]

# 4. 方差与标准差
print("9. std (标准差):", arr.std()) # 标准差
print("10. var (方差):", arr.var()) # 方差

# 5. 按轴统计 (axis)
print("\n【按轴统计演示】")
print("axis=0 (列操作):", arr.sum(axis=0)) # [1+4, 2+5, 3+6] => [5, 7, 9]
print("axis=1 (行操作):", arr.sum(axis=1)) # [1+2+3, 4+5+6] => [6, 15]


2. 数组排序与检索 (Sort & Search)

理论部分

函数名作用备注
sort()对数组进行排序默认按最后一个轴排序
argsort()返回排序后的索引常用于间接排序
where()三元运算 (条件筛选)np.where(条件, 真值, 假值)
extract()根据条件提取元素需要先生成条件数组

 实操代码

import numpy as np

# --- 准备数据 ---
arr = np.array([3, 1, 2, 5, 4])
matrix = np.array([[3, 1], [2, 4]])

print("【排序与检索演示】")
print("原始数组:", arr)
print("-" * 30)

# 1. sort: 直接排序
sorted_arr = np.sort(arr)
print("1. sort (排序后):", sorted_arr)

# 2. argsort: 返回索引
# 原数组 [3, 1, 2, 5, 4] 排序后 [1, 2, 3, 4, 5]
# 索引位置: 1在原第1位, 2在原第2位, 3在原第0位...
print("2. argsort (排序索引):", np.argsort(arr)) # 输出 [1, 2, 0, 4, 3]

# 3. where: 条件判断 (类似 Excel 的 IF)
# 语法: where(条件, 满足条件的值, 不满足条件的值)
cond = arr > 3
print("3. where (大于3显示'大',否则'小'):", np.where(cond, '大', '小'))
# 输出: ['小' '小' '小' '大' '大']

# 4. extract: 提取满足条件的元素
print("4. extract (提取大于3的元素):", np.extract(cond, arr))
# 输出: [5 4]


3. 集合运算 (Set Operations)

 理论部分

函数名作用备注
unique()找出唯一值并返回去重
intersect1d()计算交集两个数组共有的元素
union1d()计算并集合并去重
setdiff1d()计算差集在数组1中但不在数组2中
setxor1d()计算对称差集只在其中一个数组中出现的元素

 实操代码

import numpy as np

# --- 准备数据 ---
a = np.array([1, 2, 3, 4, 5])
b = np.array([4, 5, 6, 7, 8])

print("【集合运算演示】")
print("数组a:", a)
print("数组b:", b)
print("-" * 30)

# 1. unique: 去重 (如果数组本身有重复)
c = np.array([1, 1, 2, 3])
print("1. unique (去重):", np.unique(c))

# 2. intersect1d: 交集 (Intersection)
print("2. intersect1d (交集 a∩b):", np.intersect1d(a, b)) # [4, 5]

# 3. union1d: 并集 (Union)
print("3. union1d (并集 a∪b):", np.union1d(a, b)) # [1, 2, 3, 4, 5, 6, 7, 8]

# 4. setdiff1d: 差集 (Difference)
print("4. setdiff1d (a中有b中无):", np.setdiff1d(a, b)) # [1, 2, 3]

# 5. setxor1d: 对称差集 (Symmetric Difference)
print("5. setxor1d (对称差集):", np.setxor1d(a, b))
# 解释:(a中有b中无) + (b中有a中无) => [1, 2, 3, 6, 7, 8]


4. 线性代数 (Linear Algebra)

理论部分

函数名作用备注
dot()点积 / 矩阵乘法最常用的矩阵乘法
vdot()计算向量的点积会把数组展平
inner()内积类似 dot,但在多维数组上有区别
matmul()矩阵乘法 (Python 3.5+)推荐的矩阵乘法方式
det()计算行列式方阵才有行列式
inv()计算逆矩阵方阵且满秩

实操代码

import numpy as np

# --- 准备数据 ---
A = np.array([[1, 2],
              [3, 4]])
B = np.array([[5, 6],
              [7, 8]])

print("【线性代数演示】")
print("矩阵A:\n", A)
print("矩阵B:\n", B)
print("-" * 30)

# 1. dot: 矩阵乘法 (核心)
# A.dot(B) 等价于 A @ B
result_dot = np.dot(A, B)
print("1. dot (矩阵乘法 A * B):")
print(result_dot)
# 计算过程: [1*5+2*7, 1*6+2*8] => [19, 22]
#           [3*5+4*7, 3*6+4*8] => [43, 50]

# 2. det: 行列式
det_A = np.linalg.det(A)
print("2. det (行列式 |A|):", det_A) # 1*4 - 2*3 = -2

# 3. inv: 逆矩阵
# 只有行列式不为0才有逆矩阵
if det_A != 0:
    inv_A = np.linalg.inv(A)
    print("3. inv (逆矩阵 A^-1):")
    print(inv_A)

# 4. matmul: 现代矩阵乘法
# 推荐使用 @ 符号,更直观
result_mat = A @ B
print("4. matmul (A @ B):")
print(result_mat)


5. 随机数模块 (Random)

理论部分

函数名作用备注
rand()生成 [0, 1) 均匀分布随机数rand(2,3) 生成 2x3 矩阵
randn()生成标准正态分布随机数均值为0,方差为1
randint()生成整数随机数randint(0, 10) 生成 0-9
normal()生成正态分布随机数可指定均值和方差
uniform()生成指定范围均匀分布uniform(1, 10)
seed()设置随机种子保证结果可复现

 实操代码

import numpy as np

print("【随机数演示】")
print("-" * 30)

# 1. 设置种子 (保证每次运行结果一样)
np.random.seed(42)

# 2. rand: [0, 1) 之间的随机数
print("1. rand (0-1随机):", np.random.rand())

# 3. randint: 整数随机
# 生成 1 个 0 到 9 的整数
print("2. randint (整数随机):", np.random.randint(0, 10))

# 4. randn: 标准正态分布 (高斯分布)
# 生成一个接近 0 的数,大部分在 -1 到 1 之间
print("3. randn (正态分布):", np.random.randn())

# 5. normal: 自定义正态分布
# 生成均值为 100,标准差为 15 的随机数 (模拟智商分布)
print("4. normal (均值100):", np.random.normal(100, 15))

# 6. 生成数组
print("5. 生成 2x3 的随机整数矩阵:")
print(np.random.randint(0, 100, (2, 3)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值