【问题标题】:Strange scatterplot of sin(x) in python3python3中sin(x)的奇怪散点图
【发布时间】:2020-05-01 18:11:50
【问题描述】:

在尝试绘制 -360 到 360 之间的正弦函数图时,我遇到了一个奇怪的散点图输出,看起来很时髦。有谁知道它可能是什么?它实际上是散点图对 sin 图的近似还是其他什么?

我的代码如下:

from sympy import sin, cos, pi
import matplotlib.pyplot as plt

sin_values = []
cos_values = []

for value in range((-360),(360)):
    sin_values.append(sin(value))
    #cos_values.append(cos(value))

plt.scatter((range(-360,360)),sin_values)
#plt.scatter((range(-360,360)),cos_values,color="r")
plt.show()

https://i.stack.imgur.com/RI6RM.png

【问题讨论】:

    标签: python-3.x trigonometry


    【解决方案1】:

    首先,为了计算数值,您应该使用numpy 而不是sympySympy 用于符号演算,而 numpy 用于数值计算(您正在做什么)。你可以一次性完成数组:

    import numpy as np
    x = np.arange(-2*np.pi,2*np.pi,100)
    sin_values = np.sin(x)
    

    其次,请注意,通常这些函数需要radian,而不是度数。在您的情况下,这是很多弧度,所以您看到 aliasing 因为您的 x 分辨率不足以正确解析波浪。您可以通过将这些度数乘以 2pi 再除以 360 来将这些度数转换为弧度。或者在更好的范围内构建您的 x 数组。

    希望对你有帮助,

    【讨论】:

    • 感谢您的帮助!关于 numpy 的快速问题:我认为 numpy 没有返回 sin(2*pi)=0 因为 pi 不是浮点数?
    • pi 在 numpy 中被认为是浮点数,但确实由于数值近似,您可能不会得到精确的 0,而是非常小的值,例如 1e-14。 Numpy 绝对更适合想做的事情。你的问题解决了吗?
    • 酷,很高兴听到它!在这种情况下,您可以考虑接受答案,以帮助可能遇到相同问题的其他人。
    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 2015-09-18
    • 2020-02-15
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多