2016-07-18 20 views
0

Ich arbeite an einem Python-Code, um Eddy Kinetic Energy zu plotten. Ich bin ziemlich neu in Python und ich bin verwirrt über einen Fehler, den ich bekommen habe. Ich mache mir keine Gedanken darüber, meine Daten auf einer Karte zu plazieren, ich möchte nur sehen, ob ich es zum Plot kriegen kann. Hier ist mein Code und Fehler:Warum bekomme ich diesen Fehler: TypeError: Eingabe muss ein 2D-Array sein

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.cm as cm 
from pylab import * 
from netCDF4 import Dataset 
from mpl_toolkits.basemap import Basemap 
import matplotlib.cm as cm 

from mpl_toolkits.basemap import shiftgrid 
test = Dataset('p.34331101.atmos_daily.nc', 'r') 

lat = test.variables['lat'][:] 
lon = test.variables['lon'][:] 
level = test.variables['level'][5] 
time = test.variables['time'][:] 
u = test.variables['ucomp'][:] 
v = test.variables['vcomp'][:] 
temp = test.variables['temp'][:] 

print(lat.shape) 
print(u.shape) 
#uz = np.reshape(u, (30, 26, 90)) 
uzm = np.nanmean(u, axis=3) 

#vz = np.reshape(v, (30, 26, 90)) 
vzm = np.nanmean(v, axis=3) 
print(uzm.shape) 

ustar = u-uzm[:,:,:,np.newaxis] 
vstar = v-vzm[:,:,:,np.newaxis] 

EKE = np.nanmean(.5*(ustar**2 + vstar**2), axis=3) 

EKE1 = np.asarray(EKE) 
%matplotlib inline 

print(EKE.shape) 

levels=[-10, -5, 0, 5, 10] 
plt.contour(EKE[1,1,:]) 
#EKE is time, level, lat and the shape is (30, 26, 90) 

Typeerror: Geben Sie ein 2D-Array sein muss.

Antwort

0

Bret, würden Sie wahrscheinlich mehr Hilfe bekommen, wenn Sie ein wenig mehr Informationen mit Ihrem Fehler enthalten, haben Sie nicht eine Zeilennummer zu sehen?

Ich würde vermuten, dass Ihr Problem ein 1D-Array an Kontur() übergeben wird. Dies erscheint manchmal kontraintuitiv, aber numpy reduziert die Dimensionen automatisch, wenn Sie einen einzelnen Wert in einem Index angeben.

das heißt versuchen

print(EKE.shape) 
print(EKE[1,1,:].shape) 
print(EKE[1:2,1:2,:].shape)