Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有numpy.gradient的非均匀间距_Python_Numpy_Derivative_Differentiation - Fatal编程技术网

Python 具有numpy.gradient的非均匀间距

Python 具有numpy.gradient的非均匀间距,python,numpy,derivative,differentiation,Python,Numpy,Derivative,Differentiation,我不确定在使用numpy.gradient时如何指定非均匀间距 下面是一些y=x**2的示例代码 import numpy as np import matplotlib.pyplot as plt x = [0.0, 2.0, 4.0, 8.0, 16.0] y = [0.0, 4.0, 16.0, 64.0, 256.0] dydx = [0.0, 4.0, 8.0, 16.0, 32.0] # analytical solution spacing = [0.0, 2.0, 2.0,

我不确定在使用numpy.gradient时如何指定非均匀间距

下面是一些y=x**2的示例代码

import numpy as np
import matplotlib.pyplot as plt

x = [0.0, 2.0, 4.0, 8.0, 16.0]
y = [0.0, 4.0, 16.0, 64.0, 256.0]
dydx = [0.0, 4.0, 8.0, 16.0, 32.0] # analytical solution

spacing = [0.0, 2.0, 2.0, 4.0, 8.0] #added a zero at the start to get length matching up with y

m = np.gradient(y, spacing)

plt.plot(x, y, 'bo',
         x, dydx, 'r-', #analytical solution
         x, m, 'ro')    #calculated solution
plt.show()
间距数组的长度总是比我要计算的梯度数组的长度小一倍。添加一个零以获得匹配的长度(如上面的示例代码中所示)会给出错误的答案,一个点的梯度为无穷大

我无法理解/遵循numpy.gradient文档中的非均匀间距()

我应该如何指定点之间的间距?有没有其他方法可以做到这一点


Numpy版本1.9.2

函数的API非常混乱。对于间距不均匀的采样点,采用点的坐标,而不是间距:

varargs:标量或数组列表,可选

f值之间的间距。所有标注的默认单位间距。可以使用以下命令指定间距:

  • 单个标量可指定所有标注的采样距离
  • N个标量为每个标注指定一个恒定的采样距离。i、 e.dx,dy,dz
  • N个数组以指定沿F的每个维度的值的坐标。数组的长度必须与相应维度的大小匹配
  • 意义为2的N个标量/数组的任意组合。三,
  • 我稍微修改了您的示例:

    import numpy as np
    import matplotlib.pyplot as plt
    
    x = np.random.rand(10)
    x.sort()
    y = x**2
    dydx = 2*x
    
    dydx_grad = np.gradient(y, x)
    
    plt.plot(x, dydx, 'k-', label='analytical solution')
    plt.plot(x, dydx_grad, 'ro', label='calculated solution')
    plt.legend(); plt.xlabel('x'); plt.ylabel('dy / dx'); plt.show(); 
    

    这仍然给了我不正确的梯度,即使我增加了点数。我想知道这是否是我这边的问题。按照他们的例子,我无法得到与numpy.gradient文档相同的答案。当我把相同的f和x值放进去时,得到的是[inf,1.5,1.67,1,1.125,0.83],而不是它们的非均匀间距答案[1,3,3.5,6.7,6.9,2.5])。我会继续玩这个,看看我是否能让它工作。谢谢。我的numpy版本已经过时了。其他人也有类似的问题()。我对它进行了更新,现在它可以正常工作了。在windows上,这是pip安装--升级numpy