Python 使用numpy使用上一个y元素计算下一个y
我想计算一辆车的速度,在x轴上以秒为单位绘制一幅图,在y轴上以公里/小时为单位绘制一幅图。为此,我需要得到之前计算的y值 示例:y[x]=y[x-1]*aPython 使用numpy使用上一个y元素计算下一个y,python,numpy,Python,Numpy,我想计算一辆车的速度,在x轴上以秒为单位绘制一幅图,在y轴上以公里/小时为单位绘制一幅图。为此,我需要得到之前计算的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中是可行的,还是应该循环遍历所有索引?我不知道在numpy中是否可行,但我知道如何使用pandas轻松实现: import
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中是可行的,还是应该循环遍历所有索引?我不知道在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)
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
在我的代码中删除标有è
的行,以获得更有效的方法 您对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
@GM
a
应该是加速度。请注意,在python(和其他编程语言)中,您使用的是小数点,而不是逗号。如果您使用a=011768
,a
是一个元组;使用a=0.11768
。@tobias_k好的,现在有意义了……另外,我认为计算应该是y[x]=y[x-1]+a
(加上,而不是次数)。或者,只需执行y[x]=y0+a*x
。您是正确的。这似乎是个好办法。谢谢仅供参考:对于numpy数组这样的操作,不要使用列表理解。这比仅仅做Y=y0+a*X
效率要低得多@JoeKington谢谢你的提示,如果你不介意的话,我会把它包括在我的答案中。我自己不太使用numpy
。如果我们从y.append(a*y[I-1])
改为y.append(a+y[I-1])
(我的错!),并删除for语句中的-1
,然后设置y=[0]
,那么它工作得很好。非常感谢。(我没有足够的声誉来支持你的回答。对不起。)没问题。我很乐意帮助你:)或者干脆v=a*x
。不需要循环和中间列表。
Y = y0 + a * X # multiplies each value of X with a and adds y0