Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用numpy使用上一个y元素计算下一个y_Python_Numpy - Fatal编程技术网

Python 使用numpy使用上一个y元素计算下一个y

Python 使用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

我想计算一辆车的速度,在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 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