2015-01-20 17 views
23

Bu parçacıkların bir tonu olduğunu biliyorum, ancak bunların hepsi 3x3 matrisler ve bu tür şeyler gibi çok basit durumlar içindir ve çözümler durumumla başlamaya bile başlamaz. Bu yüzden G'ye karşı l1'i grafiklemeye çalışıyorum (bu bir on bir değil, bir L1 değil). Veriler bir excel dosyasından yüklediğim dosyada. Excel dosyası 14x250'dir, bu yüzden her biri 250 veri noktası olan 14 argüman vardır. Başka bir kullanıcı vardı (Hugh Bothwell'e bağır!), Kodumdaki bir hata ile bana yardımcı oldu, ama şimdi başka bir hata ortaya çıktı. Yani buradaIndexError: dizi için çok fazla dizin

söz konusu kod şudur:

# format for CSV file: 
header = ['l1', 'l2', 'l3', 'l4', 'l5', 'EI', 
     'S', 'P_right', 'P1_0', 'P3_0', 
     'w_left', 'w_right', 'G_left', 'G_right'] 

def loadfile(filename, skip=None, *args): 
    skip = set(skip or []) 
    with open(filename, *args) as f: 
     cr = csv.reader(f, quoting=csv.QUOTE_NONNUMERIC) 
     return np.array(row for i,row in enumerate(cr) if i not in skip) 
#plot data 
outputs_l1 = [loadfile('C:\\Users\\Chris\\Desktop\\Work\\Python Stuff\\BPCROOM - Shingles analysis\\ERR analysis\\l_1 analysis//BS(1) ERR analysis - l_1 - P_3 = {}.csv'.format(p)) for p in p3_arr] 

col = {name:i for i,name in enumerate(header)} 

fig = plt.figure() 
for data,color in zip(outputs_l1, colors): 
    xs = data[:, col["l1"  ]] 
    gl = data[:, col["G_left" ]] * 1000.0 # column 12 
    gr = data[:, col["G_right"]] * 1000.0 # column 13 
    plt.plot(xs, gl, color + "-", gr, color + "--") 
for output, col in zip(outputs_l1, colors): 
    plt.plot(output[:,0], output[:,11]*1E3, col+'--') 
plt.ticklabel_format(axis='both', style='plain', scilimits=(-1,1)) 
plt.xlabel('$l1 (m)$') 
plt.ylabel('G $(J/m^2) * 10^{-3}$') 
plt.xlim(xmin=.2) 
plt.ylim(ymax=2, ymin=0) 

plt.subplots_adjust(top=0.8, bottom=0.15, right=0.7) 

tüm programı çalıştırdıktan sonra, ben hata iletisini alma:

Traceback (most recent call last): 
    File "C:/Users/Chris/Desktop/Work/Python Stuff/New Stuff from Brenday 8 26 2014/CD_ssa_plot(2).py", line 115, in <module> 
    xs = data[:, col["l1"  ]] 
IndexError: too many indices for array 

ve ben bu sorunun koştu önce, başka karıştığı vardı Yukarıdaki hata mesajının altındaki çizgi aşağıdakileri ifade eder:

Traceback (most recent call last): File "FILE", line 119, in <module> 
gl = data[:, col["G_left" ]] * 1000.0 # column 12 
IndexError: index 12 is out of bounds for axis 1 with size 12 

İlkini anlıyorum hata, ama sadece sabitleme sorunları yaşıyorum. İkinci hata benim için kafa karıştırıcı olsa da. Patronum gerçekten boynumu solumak böylece herhangi bir yardım BÜYÜK takdir edilecektir!

IndexError: too many indices for array 
xs = data[:, col["l1"  ]] 

'Çok fazla endeksleri' çok fazla indeks değerlerini verdik anlama gelir: nokta çok kolay olmasa da

+0

diziler dayalı sıfır, –

+0

Peşinde 'baskı data' koyarak denediniz 12 eleman dizideki hiçbir endeksi 12 olduğunu' verilerin, renk zip (outputs_l1, renkler) için: 'veri görünüyor ne her satırı görmek için sevmek? Beklediğiniz şekilde biçimlendirilmiş gibi görünmüyor (sizin inancınız 14 elemanlık bir dizi olacak, doğru? Sadece 12 elemanın bulunduğu örneklere benziyor) 'yazdığımda – zehnpaard

+0

' print data 'veya' print outputs_l1 ', bunların geçersiz sözdizimi olduğunu söylüyor. ve 14 tane argüman var, bu yüzden son ikisi # 12 ve # 13 olacak, bu da grafik için aradığım şey. Ve sadece 12 olan herhangi bir örneği nerede görüyorsun? Bu daha önce benim sorunumdu ve bunu düzeltdiğimi düşündüm ama – Chris

cevap

25

Ben, sorun hata mesajında ​​verilen düşünüyorum. 2B dizi olmak için veri beklediğinizden 2 değer verdiniz. Numpy şikayet ediyor çünkü data 2D değil (1D veya Yok).

Bu bir tahmindir - loadfile() dosyasına aktardığınız dosya adlarından biri boş bir dosyaya mı yoksa kötü biçimlendirilmiş bir dosyaya mı işaret ediyor? Eğer öyleyse, 1D ya da hatta boş bir dizi alabilir (np.array(None) bir Error atmaz, bu yüzden asla ...). Bu hataya karşı korumak istiyorsanız, loadfile işlevinize bazı hata denetimleri ekleyebilirsiniz.

ederim senin for döngü yerleştirilmesinde tavsiye: Bu Python 2.x veya 3.x çalışacak ve konunun kaynağını ortaya çıkarabilir

print(data) 

. Bunu, sorunu veren outputs_l1 listenizin (bir dosya) yalnızca bir değeri olduğunu görebilirsiniz.