我想计算车辆的速度,绘制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,或者我应该循环迭代所有索引?
答案 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()
这是结果:
修改强>
正如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])