首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用numpy.gradient求直线斜率和任意点曲线斜率是有效的吗?

用numpy.gradient求直线斜率和任意点曲线斜率是有效的吗?
EN

Data Science用户
提问于 2020-07-06 18:25:50
回答 1查看 6K关注 0票数 3

直线的斜率和曲线的斜率有什么区别?使用numpy.gradient在任何一点上寻找直线的斜率和曲线的斜率有效吗?

代码语言:javascript
复制
    #slope of line at any point 
    tanθ= y2-y1/x2-x1

    #slope of curve at any point 
    tanθ  =dy/dx

使用numpys np.gradient()得到曲线和直线的斜率有效吗?或者仅仅是为了找到直线的坡度?

参考直线与曲线的斜率

EN

回答 1

Data Science用户

发布于 2020-07-06 21:59:53

直线的斜率和曲线的斜率有什么区别?

这真的是一个透视的问题。一条直线的斜率在这条线的整个跨度上是相同的,也就是说,直到这条线改变方向。一条曲线的斜率就像数以百万计的细线连接的斜率,所以在微小的跨度上,斜率只是相同的值。因此,我们只能讨论曲线在给定点处的斜率(例如,给定的x值),然后我们通常讨论该点上直线的梯度。

使用您的单词,numpy.gradient计算的梯度是曲线的斜率,使用的是连续值的差异。

但是,您可能会想象,当您的更改在越来越小的距离上测量时,就会变成斜率(根据您的定义)。所以,当x2 - x1几乎达到零的时候,你和dx的意思是一样的。

粗示例与10点

下面是一个粗略的numpy.gradient示例,其中dx的S大小为1 (等距值):

代码语言:javascript
复制
In [1]: import matplotlib.pyplot as plt
In [2]: import numpy as np
In [3]: N = 10                                  # Use ten samples
In [4]: x = np.linspace(0, np.pi*2, N)          # Equally spaced x values
In [5]: y = np.sin(x)                           # Corresponding sine values
In [6]: grads = np.gradient(y)                  # compute the gradients

绘制值和梯度--我通过0.5将梯度移到了右边,因此它们的值与它们描述斜率的段的中间位置一致:

代码语言:javascript
复制
In [7]: fig, ax = plt.subplots()           
In [8]: ax.plot(x, y, "-b", label="values")                  # the y values
        ax.plot(x + 0.5, grads, "--r", label="gradients")    # the computed gradients
        plt.legend()
In [9]: plt.show()

具有1,000,000点

的优秀示例

现在我们做的例子和以前一样,只需使用100万个点:N = 1_000_000。蓝线看起来更像一个真正的正弦波,但是红线现在用比以前高得多的分辨率来测量梯度,给出了100万个点的确切值--对于蓝线的每一个微小线段。

所以梯度值看起来都是零!这仅仅是因为我们使x2-x1变得几乎为零(1 / 1e6),所以y2 - y1的值也基本上为零!我们已经开始接近\frac{dy}{dx}了。

让我们改变轴的比例,看看渐变仍然符合我们可能期望的模式,而且看起来确实非常平滑,就像一条曲线:

好得多:)

(注意标度差- 1e-6)。

以下是对whatnp.gradientreally做的的一些解释。

票数 3
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/77259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档