如何在Python中执行三角形的浮点数范围?

时间:2016-06-06 18:43:08

标签: python math

Matlab的

x = 0:pi/100:2*pi;
y = sin(x);
plot(y)

我认为range()在这里不起作用,因为它只接受结束参数作为整数但我需要浮点数(0.0; 2*pi)。 Python 2.7.11 +中的伪代码

import math
x = pseudoRange(0.0, 2*math.pi, math.pi/100);

对整数而言,ceil()不可行。

如何在Python中使用三角函数范围的浮点数?

3 个答案:

答案 0 :(得分:5)

使用生成器表达式:

(math.pi/100*k for k in range(200))

如果您希望结果作为列表使用:

[math.pi/100*k for k in range(200)]

您还可以使用list-comprehension方法获取相应的y值:

x = [math.pi/100*k for k in range(200)]
y = [math.sin(p) for p in x]

然后可以使用matplotlib

绘制一对列表x,y

请注意,在上文中,这些点的范围是0.01.99*math.pi。如果您希望最终得分为2*pi,则需要将range(200)替换为range(201)

答案 1 :(得分:3)

您可以使用numpy.arange

>>> np.arange(0, 2*math.pi, math.pi/100)
array([ 0.        ,  0.03141593,  0.06283185,  0.09424778,  0.12566371,
        # ... 190 more ...
        6.12610567,  6.1575216 ,  6.18893753,  6.22035345,  6.25176938])

您可能也对numpy.linspace感兴趣:

>>> np.linspace(0, 2*math.pi, 200)
array([ 0.        ,  0.0315738 ,  0.06314759,  0.09472139,  0.12629518,
        # ... 190 more ...
        6.15689013,  6.18846392,  6.22003772,  6.25161151,  6.28318531])

使用np.arange,第三个参数是step,而np.linspace则是区间内均匀间隔值的总数。另请注意,linspace将包含2*pi,而arange则不会,但会停留在step的最后一个倍数。

然后你可以用matplotlib.pyplot绘制那些。对于sin,您可以使用np.sin将正弦函数应用于输入数组的每个元素。对于其他功能,请使用列表推导。

>>> from matplotlib import pyplot
>>> x = np.arange(0, 2*math.pi, math.pi/100)
>>> y = np.sin(x) # using np.sin
>>> y = [math.sin(r) for r in x] # using list comprehension
>>> pyplot.plot(x, y)
[<matplotlib.lines.Line2D at 0xb3c3210c>]
>>>pyplot.show()

答案 2 :(得分:0)

假设您已经安装了matplotlib或者您可以在系统上安装它,matlab命名空间下可以使用某种pylab克隆,

import pylab as pl

x = pl.linspace(0, 2*pl.pi,201) #  x is an array
y = pl.sin(x)                   #  y is computed with an array expression
pl.plot(x, y, "ro-", label="Sine(t)")
pl.legend(loc='best')
pl.xlabel('$\\omega_o t$')
pl.show()

您还可以直接导入所有pylab的命名空间

from pylab import *

x = linspace(0, 2*pi, 201)
y = sin(x)
...

但不推荐这样做,因为您的命名空间中现在有近1000个新的非限定名称......

严格来到你的问题,x = 0:pi/100:2*pi;映射到不同的语法,x = pl.linspace(0, 2*pl.pi,201),你没有指定增量而是指定点数(正如你所指出的,由于栅栏效应你必须指定201才能获得所需的结果。