You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用np.gradient计算数组两类梯度并实现对应位置对比绘图?

解决方案

完全可以用np.gradient实现你的需求,以下是具体代码和步骤:

1. 导入依赖库

import numpy as np
import matplotlib.pyplot as plt

2. 生成随机数组

np.random.seed(42)  # 加随机种子保证结果可复现
rand = np.random.randint(low=1, high=10, size=(100,))

3. 计算两种梯度

  • 相邻值间的梯度:直接对原数组调用np.gradient,默认间距为1,得到每个位置的相邻梯度:
grad_adjacent = np.gradient(rand)
  • 每第10个值间的梯度:先提取原数组中每第10个元素,再计算其梯度,最后将结果映射到原数组的对应位置(其余位置设为NaN,避免绘图干扰):
# 提取每第10个元素
rand_10step = rand[::10]
# 计算该子数组的梯度
grad_10step = np.gradient(rand_10step)
# 创建与原数组长度一致的数组,仅在每第10个位置填充梯度值,其余为NaN
grad_10step_full = np.full_like(rand, np.nan)
grad_10step_full[::10] = grad_10step

4. 绘图展示

plt.figure(figsize=(12, 6))

# 绘制原数组
plt.plot(rand, label='原随机数组', color='blue', alpha=0.5)
# 绘制相邻梯度
plt.plot(grad_adjacent, label='相邻值梯度', color='green', linestyle='--')
# 绘制每第10个值的梯度(用散点+线更清晰)
plt.plot(grad_10step_full, label='每第10个值梯度', color='red', marker='o', linestyle='')

plt.xlabel('数组索引')
plt.ylabel('值/梯度')
plt.title('数组及两种梯度对比')
plt.legend()
plt.grid(True)
plt.show()

关键说明

  • np.gradient默认对一维数组计算中心差分梯度,边缘点自动用前向/后向差分,结果长度和原数组完全一致。
  • 每第10个值的梯度通过提取子数组计算后,映射回原索引位置,用NaN填充其余位置,绘图时只会在对应索引处显示数值,完美匹配你的位置对应需求。

内容的提问来源于stack exchange,提问作者s28

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 14:15:05