numpy 高阶函数 —— np.histogram

本文详细介绍了NumPy库中np.diff函数的使用方法及其参数含义,并通过实例展示了如何进行一阶和二阶差分计算。此外,还深入解析了np.histogram函数的工作原理,包括其返回值及如何正确理解直方图的输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • np.diff(a, n=1, axis=-1):n 表示差分的阶数;

    >> x = np.array([1, 2, 4, 7, 0])
    >> np.diff(x)
    array([ 1,  2,  3, -7])
    >> np.diff(x, n=2)
    array([  1,   1, -10])

1. np.histogram

官方文档:numpy.histogram — NumPy v1.12 Manual

  • numpy.histogram(a, bins=10, range=None, normed=False, weights=None, density=None)
    • 返回值,有两个,
      • hist : array
      • bin_edges : array of dtype float,bin edges 的长度要是 hist 的长度加1,bin edges (length(hist)+1),也即 (bin_edges[0], bin_edges[1]) ⇒ hist[0],….,(bin_edges[-2], bin_edges[-1]) ⇒ hist[-1],bin_edges 参数与输入参数的 bins 保持一致;
>>> a = np.arange(5)
>>> hist, bin_edges = np.histogram(a, density=True)
>>> hist
array([ 0.5,  0. ,  0.5,  0. ,  0. ,  0.5,  0. ,  0.5,  0. ,  0.5])
>>> hist.sum()
2.4999999999999996

>>> np.sum(hist*np.diff(bin_edges))
1.0
                            # hist*np.diff(bin_edges) ⇒ 其实表示一种概率分布;
import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt # 定义微分方程组 def phosphorus model(y, t, params): x1, x2, x3 = y k01, k10, k12, k21, k23, k31, k30 = params dx1dt = k01 + k21∗x2 + k31∗x3 − (k10 + k12)∗x1 dx2dt = k12∗x1 − (k21 + k23)∗x2 dx3dt = k23∗x2 − (k31 + k30)∗x3 return [dx1dt, dx2dt, dx3dt] # 蒙特卡洛模拟参数设置 num simulations = 1000 # 模拟次数 simulation time = 30 # 模拟时长(天) t = np.linspace(0, simulation time, 100) # 时间点 # 实验数据的均值(示例数据,需根据实际情况调整) mean params = { ’k01’: 200, # 外部输入速率均值 ’k10’: 27.3, # 自然流失速率均值 ’k12’: 247.4, # 植物吸收速率均值 ’k21’: 9.1, # 植物释放速率均值 ’k23’: 238.4, # 动物摄食速率均值 ’k31’: 65.7, # 动物排放速率均值 ’k30’: 172.7 # 动物带走速率均值 } # 参数标准差(根据数据波动性设定) std dev = { ’k01’: 40, 附录 9 ’k10’: 5, ’k12’: 50, ’k21’: 2, ’k23’: 40, ’k31’: 10, ’k30’: 30 } # 初始化存储矩阵 results = np.zeros((num simulations, 3)) # 存储稳态磷浓度 # 蒙特卡洛模拟主循环 for i in range(num simulations): # 生成随机参数(正态分布,确保正数) params = [ np.abs(np.random.normal(mean params[’k01’], std dev[’k01’])), np.abs(np.random.normal(mean params[’k10’], std dev[’k10’])), np.abs(np.random.normal(mean params[’k12’], std dev[’k12’])), np.abs(np.random.normal(mean params[’k21’], std dev[’k21’])), np.abs(np.random.normal(mean params[’k23’], std dev[’k23’])), np.abs(np.random.normal(mean params[’k31’], std dev[’k31’])), np.abs(np.random.normal(mean params[’k30’], std dev[’k30’])) ] # 初始磷含量(可根据实际情况随机化) initial = [15.0, 1.8, 13.1] # x1, x2, x3 # 求解微分方程 solution = odeint(phosphorus model, initial, t, args=(params,)) # 记录稳态结果(取最后时间点的平均值)10% steady state = np.mean(solution[−len(t)//10:], axis=0) results[i] = steady state # 结果分析 print(”\模拟结果统计:n”) print(f”湖水磷浓度均值: 10 {np.mean(results[:,0]):.2f}􏰀±􏰀{np.std(results[:,0]):.2f}􏰀mg”) print(f”植物磷浓度均值: {np.mean(results[:,1]):.2f}􏰀±􏰀{np.std(results[:,1]):.2f}􏰀mg”) print(f”动物磷浓度均值: {np.mean(results[:,2]):.2f}􏰀±􏰀{np.std(results[:,2]):.2f}􏰀mg”) # 可视化分布 plt.figure(figsize=(12,6)) plt.subplot(131) plt.hist(results[:,0], bins=30, color=’blue’, alpha=0.7) plt.title(’湖水磷浓度分布’) plt.xl
最新发布
05-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值