【问题标题】:Numpy gradient with non uniform spacing具有非均匀间距的 Numpy 梯度
【发布时间】:2018-05-25 10:24:34
【问题描述】:

我出了点问题:

import numpy as np
import matplotlib.pyplot as plt

x  = np.concatenate((np.linspace(0,1,100),np.linspace(1,2,50)));
f  = np.power(x,2);
df = 2*x;
Df = np.gradient(f,x);
plt.plot(x,df,'r', x,Df,'b');plt.show()

这就是我得到的:

否则,如果使用线性间隔数组而不使用参数 x,则一切正常。

有什么建议吗?

【问题讨论】:

  • 期望的输出是什么?
  • 我希望红色和蓝色是一样的。 red 是 f 的实际解析导数。
  • 无法重现问题。渐变与我的安装相匹配并且是正确的。你的 matplotlib 版本是多少?
  • 感谢您的尝试。您是否使用我提供的相同代码获得了正确的情节?我会检查我当前的版本
  • 是的。情节看起来如预期。在 matplotlib 2.0.2 上测试。

标签: numpy gradient


【解决方案1】:

我认为这是因为 1.13 之前的 numpy 版本期望“x”参数是恒定的网格间距(参见 https://docs.scipy.org/doc/numpy-1.11.0/reference/generated/numpy.gradient.html#numpy.gradient)。即使早期版本期望一个标量 dx,他们也不会检查这个,结果是 np.gradient(f) / x,这是一个有效的除法。这很烦人,因为为 numpy 1.13 编写的代码可能在早期版本上运行,但输出不正确且没有错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多