X和Y的尺寸不一样。Python问题

X和Y的尺寸不一样。Python问题,python,numpy,physics,Python,Numpy,Physics,我正在写一个代码,使用前向欧拉方法数值求解一些速度方程。当我运行代码时,我得到一个错误: ` 235 y = np.atleast_1d(y) 236 if x.shape[0] != y.shape[0]: --> 237 raise ValueError("x and y must have same first dimension") 238 if x.ndim > 2 or y.ndi

我正在写一个代码,使用前向欧拉方法数值求解一些速度方程。当我运行代码时,我得到一个错误:

`   235         y = np.atleast_1d(y)
    236         if x.shape[0] != y.shape[0]:
--> 237             raise ValueError("x and y must have same first dimension")
    238         if x.ndim > 2 or y.ndim > 2:
    239             raise ValueError("x and y can be no greater than 2-D") 
ValueError:x和y必须具有相同的第一个维度`

我已经盯着这个看了好几个小时,我看不出它们是如何不同的维度的。任何帮助都将不胜感激

以下是完整的代码:

from matplotlib.pylab import *
import numpy as n
import pylab as p
steps = 100
m = .15 #Kilograms
D= .07 #Meters
Gamma = .25 #Units of Ns^2/m^4
c = Gamma*D**2
g = 9.8 #Meters per second
v_0 = 25.0 #initial speed
theta_0 = 45.0 #initial angle
dt = .25
t = linspace(0, 100, 10)

Vx = zeros(steps)
Vy = zeros(steps)
x = zeros(steps)
y = zeros(steps)

for i in range(steps - 1):
    Vx[i] = Vx[i-1] - dt*((c/m)*sqrt(Vx[i-1]**2+Vy[i-1]**2)*Vx[i-1])
    Vy[i] = Vy[i-1] - dt*((c/m)*sqrt(Vx[i-1]**2+Vy[i-1]**2)*Vy[i-1] + g)
    x[i] = x[i-1] + dt*(Vx[i-1])
    y[i] = y[i-1] + dt*(Vy[i-1])
    if y[i] < 0.0:
        print (x[i]*y[i-1] - x[i-1]*y[i])/(y[i-1] - y[i])
        break

plot(y, t)
show()
从matplotlib.pylab导入*
将numpy作为n导入
将pylab作为p导入
步数=100
m=0.15公斤
D=0.07米
伽马=.25#单位为Ns^2/m^4
c=伽马*D**2
g=9.8米/秒
v_0=25.0#初始速度
θu 0=45.0初始角
dt=0.25
t=linspace(0,100,10)
Vx=零(步数)
Vy=零(步数)
x=零(步数)
y=零(步数)
对于范围内的i(步骤-1):
Vx[i]=Vx[i-1]-dt*((c/m)*sqrt(Vx[i-1]**2+Vy[i-1]**2)*Vx[i-1])
Vy[i]=Vy[i-1]-dt*((c/m)*sqrt(Vx[i-1]**2+Vy[i-1]**2)*Vy[i-1]+g)
x[i]=x[i-1]+dt*(Vx[i-1])
y[i]=y[i-1]+dt*(Vy[i-1])
如果y[i]<0.0:
打印(x[i]*y[i-1]-x[i-1]*y[i])/(y[i-1]-y[i])
打破
绘图(y,t)
show()

错误正在自我解释-
y
t
应该具有相同的形状,但它们没有。我怀疑这就是你想要的:

t = linspace(0, 100, steps)

这两个数组的维度不相同,matplotlib是正确的。您可以通过执行以下操作来检查尺寸和尺寸(“形状”):

>>> y.shape
(100,)
>>> t.shape
(10,)
那就这么做吧

t = linspace(0, 100, steps)

如果阵列的尺寸不匹配,matplotlib将显示错误。您可以简单地检查它,并使用numpy将其压缩到所需的尺寸

>>> x = np.array([[[0], [1], [2]]])
x、 形状

(1,3,1)

np.挤压(x,轴=(2,).形状


(1,3)

发布之后,我发现了错误。。。我的t应该是t=linspace(0100,steps)您确定要
范围(steps-1)
?看起来您可能需要
范围(1步)
。否则,您将尝试访问
Vx[-1]
,这可能不是您想要的。啊,感谢您捕捉到这一点。我太专注于第一个错误,以至于我没有看到这一点。