【问题标题】:Understanding numpy.gradient了解 numpy.gradient
【发布时间】:2015-08-25 09:51:01
【问题描述】:

我有一个时间序列的电压值记录在mV 中,每个0.02 ms,存储为一个 numpy 数组。

如果我这样做,

dv_dt = np.gradient(v),

dv_dt 的单位是什么?会是V/s 的倍数吗?例如mV/smV/(0.02 ms)等?

我的理解是 gradient 返回传递给它的参数的导数。对吗?

看到这个related question

【问题讨论】:

    标签: python arrays numpy derivative


    【解决方案1】:

    注意 dt 的单位间距。如documentation 中所述,gradient 假定单位间距为 1,除非您通过 vararg 参数提供样本距离。只有在 dt = 1 用于所有数据点时,您的情况才是正确的。

    您必须自己定义单位。可以使用毫秒,但除非您没有充分的理由,否则我会使用 SI 单位(在这种情况下,秒和伏特;与 mV 和 ms 相同)。梯度的单位为 mV/ms 或 V/s。

    在您的情况下,np.gradient(v,0.02) 将为您提供用您的时间轴间距校正的电压信号的一阶差。

    【讨论】:

    • 感谢您的回答。 dt 对于我的所有数据点都是相同的——它是 0.02 毫秒,就像我在问题陈述中所说的那样——除非我误解了你。假设dt = 1,是指数组中的间距,如数组中一个元素的每一步代表一个dt?在我的情况下,我仍然不清楚衍生物的单位是什么。
    • dv/dt 表示你先取 v 的导数,然后除以 t 的导数。如果您的信号在 1 毫秒或 0.02 毫秒内改变 1 mV,则会产生巨大的差异。在第一种情况下,梯度为 1 mV/ms,在第二种情况下,梯度为 50 mV/ms
    • 好的,所以我手工完成了,回到这个我对你想说的有更好的理解。对我来说正确的调用是np.gradient(v, 0.02),假设我想保持输入数组本身不变。返回的数组 - 导数 - 以 V / s 为单位(不是 mV / s 或其他任何东西,考虑到我提交了以 ms 为单位的 dt 和以 mV 为单位的电压,我想这应该很明显)。如果您改写答案以包含此内容,我会接受。
    猜你喜欢
    • 1970-01-01
    • 2016-12-09
    • 2012-05-03
    • 1970-01-01
    • 2021-01-03
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多