使用numpy使用前面的y元素计算下一个y

时间:2013-10-25 10:05:46

标签: python numpy

我想计算车辆的速度,绘制x轴上的时间以秒为单位的图表,以及y轴上的km / h速度。为此,我需要获得先前计算的y值。

示例:y [x] = y [x-1] * a

a = 0,11768
x = np.arange(0, 100, 1)    # 0 to 100 seconds
y = a * y[x-1] ??
plt.plot(x, y)
plt.show()

是否可以使用numpy,或者我应该循环迭代所有索引?

4 个答案:

答案 0 :(得分:1)

v=v0+at假设你的加速度是恒定的v0=0,那么就没有必要做你想做的事了:

import numpy as np
import matplotlib.pyplot as plt

a = 0.11768 #is it in m/s^2? I've used m/s^2...
v=[] #velocity at a given time ‹
x = np.arange(0, 100, 1)    # 0 to 100 seconds
for i in x: # ‹
    v.append(i*a) #read it as a*t, in fact is t...use i*a*3.6 if you want km/h ‹
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x,v,)   
plt.plot(x, v)
plt.ylabel(r'Velocity $(m/sec )$') #note if you want km/h use v.append(i*a*3.6) above
plt.xlabel(r'Time $(sec)$')
plt.show()

这是结果: enter image description here 修改 正如Joe在评论中所建议的那样,您应该使用v=a*x在我的代码中使用标记的行,以便更有效地执行此操作!

答案 1 :(得分:1)

您对y的计算错误。您必须加速度加到该速度,而不是将之前的速度与加速度相乘。另一种方法是将加速度乘以时间并将其加到某个初始速度。这样,您就可以使用y的简单列表解析。

a = 0.11768  # acceleration (note the dot instead of comma!)
y0 = 0       # initial speed at time x = 0
X = numpy.arange(0, 100, 1)
Y = numpy.array([y0 + a * x for x in X])

当使用Numpy时,有一种更简单的方法 - 感谢@JoeKington指出这一点:

Y = y0 + a * X  # multiplies each value of X with a and adds y0

答案 2 :(得分:0)

我不知道它是否可能在numpy中但我知道如何使用pandas轻松实现它:

import pandas as pd
import numpy as np
a=0.11768

df = pd.DataFrame(np.arange(0, 100, 1),columns=['X'])
df['Y'] = a*df['X'].shift(1)

答案 3 :(得分:0)

a = 0.11768
x = np.arange(0, 100, 1)
y = [1]
for i in range(1, len(x)-1):
  y.append(a * y[i-1])