numpy 如何修复“x和y必须相同大小”错误?

c9qzyr3d  于 2023-05-17  发布在  其他
关注(0)|答案(1)|浏览(455)

我是Python的新手,正在为这个错误“x和y必须相同大小”而挣扎。

def plotNumericalConvergence(paramArr, GrArr, Label):
    
    plt.figure()
    
    x = paramArr
    y = GrArr

    plt.scatter(x=x,y=y)

    plt.xlabel(Label)
    plt.ylabel('Gr')
  
    plt.title('title')
    
    plt.show()

下面是它用来绘图的代码:

def numericalConvergence(Position, Velocity, Charge, Mass, dt, B):
    
    gyroArr = np.array([])
    gyroArr2 = np.array([])
    gyroArr3 = np.array([])
    dtArr = np.array([])
    fieldArr = np.array([])
    chargeArr = np.array([])
    
    dtArr = np.append(dtArr, [dt])
    gyroArr = np.append(gyroArr, [6.324555320336759])
    gyroArr2 = np.append(gyroArr, [6.324555320336759])
    gyroArr3 = np.append(gyroArr, [6.324555320336759])
    fieldArr = np.append(fieldArr, [[0,0,1]])
    chargeArr = np.append(chargeArr, Charge)
    
   # Incrementing timestep
    for i in range (10):
        start = time.time()
        
        dt = dt + 0.1000 

        print('\n'"Timestep", i+1)

        trv= pstep(qom,Position,Velocity,0.0,dt,N_t)
        Gr = MeasuredGr(trv)
        PredGr = GyroRadius(Position, Velocity, Charge, Mass, dt, B)

        gyroArr = np.append(gyroArr, [Gr])
        dtArr = np.append(dtArr, [dt])
        
        end = time.time()
        
        print("Predicted gyro radius =", PredGr)
        print("Measured gryo radius =", Gr)
        print("Timestep =", dt)
        print("Magnetic Field =", B)
        print("Charge =", Charge)
        print("nt =",(end - start)/dt) # need to fix this## Predicted gyro radius
        Label = "DT"
    plotNumericalConvergence(dtArr, gyroArr, Label)

    # Incrementing magnetic field
    for i in range (10):
        start = time.time()
        
        dt=0.001
        B = [float(x) + 1 for x in B] # Increments all numbers in magnetic field array by 1
        
        print('\n'"Magnetic Field", i+1)

        trv = pstep(qom,Position,Velocity,0.0,dt,N_t)
        Gr = MeasuredGr(trv)
        PredGr = GyroRadius(Position, Velocity, Charge, Mass, dt, B)

        gyroArr2 = np.append(gyroArr2, [Gr])
        fieldArr = np.append(fieldArr, [[B]])

        
        end = time.time()
        
        print("Predicted gyro radius =", PredGr)
        print("Measured gryo radius =", Gr)
        print("Timestep =", dt)
        print("Magnetic Field =", B)
        print("Charge =", Charge)
        print("nt =",(end - start)/dt)
        Label = "Magnetic Field"
        
    plotNumericalConvergence(fieldArr, gyroArr2, Label)

    # Incrementing Charge
    for i in range (10):
        start = time.time()
        
        B = [0,0,1]
        Charge = Charge + 0.1
        
        print('\n'"Charge", i+1)
        
        # add label param for y, new gr array each loop - no 2nd method needed

        trv=pstep(qom,Position,Velocity,0.0,dt,N_t)
        Gr = MeasuredGr(trv)
        PredGr = GyroRadius(Position, Velocity, Charge, Mass, dt, B)

        gyroArr3 = np.append(gyroArr3, [Gr])
        chargeArr = np.append(chargeArr, [Charge])
        
        print("Predicted gyro radius =", PredGr)
        print("Measured gryo radius =", Gr)
        print("Timestep =", dt)
        print("Magnetic Field =", B)
        print("Charge =", Charge)
        print("nt =",(end - start)/dt)
        Label = "Charge"
        
    print(gyroArr3)
    print(chargeArr)
    plotNumericalConvergence(chargeArr, gyroArr3, Label)

该图适用于dt,但不适用于磁场或电荷。我在这里看到了关于重塑数组的东西,以及沿着于[:,0]之类的东西,但我真的被卡住了,不能100%理解Python。谢谢!
编辑-完整追溯:

ValueError                                Traceback (most recent call last)
Cell In [249], line 25
     22 bf=EvalB(ipos)
     23 vel = Boris(qom,ivel,ef,bf,-0.5*dt)
---> 25 numericalConvergence(ipos, vel, Charge, Mass, dt, B)
     26 #print(gyroArr)
     27 #print(dtArr)
     28 #plotNumericalConvergence(dtArr, gyroArr)

Cell In [246], line 101, in numericalConvergence(Position, Velocity, Charge, Mass, dt, B)
     99 print(gyroArr3)
    100 print(chargeArr)
--> 101 plotNumericalConvergence(chargeArr, gyroArr3, Label)
    103 return gyroArr, dtArr

Cell In [247], line 8, in plotNumericalConvergence(paramArr, GrArr, Label)
      5 x = paramArr
      6 y = GrArr
----> 8 plt.scatter(x=x,y=y)
     10 plt.xlabel(Label)
     11 plt.ylabel('Gr')

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/matplotlib/pyplot.py:2790, in scatter(x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, edgecolors, plotnonfinite, data, **kwargs)
   2785 @_copy_docstring_and_deprecators(Axes.scatter)
   2786 def scatter(
   2787         x, y, s=None, c=None, marker=None, cmap=None, norm=None,
   2788         vmin=None, vmax=None, alpha=None, linewidths=None, *,
   2789         edgecolors=None, plotnonfinite=False, data=None, **kwargs):
-> 2790     __ret = gca().scatter(
   2791         x, y, s=s, c=c, marker=marker, cmap=cmap, norm=norm,
   2792         vmin=vmin, vmax=vmax, alpha=alpha, linewidths=linewidths,
   2793         edgecolors=edgecolors, plotnonfinite=plotnonfinite,
   2794         **({"data": data} if data is not None else {}), **kwargs)
   2795     sci(__ret)
   2796     return __ret

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/matplotlib/__init__.py:1423, in _preprocess_data.<locals>.inner(ax, data, *args, **kwargs)
   1420 @functools.wraps(func)
   1421 def inner(ax, *args, data=None, **kwargs):
   1422     if data is None:
-> 1423         return func(ax, *map(sanitize_sequence, args), **kwargs)
   1425     bound = new_sig.bind(ax, *args, **kwargs)
   1426     auto_label = (bound.arguments.get(label_namer)
   1427                   or bound.kwargs.get(label_namer))

File /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/matplotlib/axes/_axes.py:4520, in Axes.scatter(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, edgecolors, plotnonfinite, **kwargs)
   4518 y = np.ma.ravel(y)
   4519 if x.size != y.size:
-> 4520     raise ValueError("x and y must be the same size")
   4522 if s is None:
   4523     s = (20 if mpl.rcParams['_internal.classic_mode'] else
   4524          mpl.rcParams['lines.markersize'] ** 2.0)

ValueError: x and y must be the same size
a2mppw5e

a2mppw5e1#

生成散点图时,xy 都应该是相等大小的一维数组。
检查 xy 的大小,它们的大小可能不同。

相关问题