2015-01-20 9 views
23

के लिए बहुत सारे सूचकांक मुझे पता है कि इन धागे का एक टन है, लेकिन उनमें से सभी 3x3 matrices और उस तरह की चीजों के बहुत सरल मामलों के लिए हैं और समाधान मेरी स्थिति पर भी लागू नहीं होते हैं। तो मैं जी बनाम एल 1 ग्राफ करने की कोशिश कर रहा हूं (यह ग्यारह नहीं है, लेकिन एक एल 1)। डेटा उस फ़ाइल में है जिसे मैंने एक्सेल फ़ाइल से लोड किया था। एक्सेल फ़ाइल 14x250 है इसलिए 14 तर्क हैं, जिनमें प्रत्येक 250 डेटा पॉइंट हैं। मेरे पास एक और उपयोगकर्ता था (ह्यूग बॉवेलवेल के लिए चिल्लाओ!) मेरे कोड में एक त्रुटि के साथ मेरी मदद करें, लेकिन अब एक और त्रुटि सामने आई है।इंडेक्स त्रुटि: सरणी

तो यहाँ

प्रश्न में कोड है:

# 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) 

पूरे कार्यक्रम चलाने के बाद, मैं त्रुटि संदेश प्राप्त:

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 

और इससे पहले कि मैं उस समस्या में पड़ गए, मैं एक और को शामिल किया था उपर्युक्त त्रुटि संदेश के नीचे की रेखा नीचे दी गई है:

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 

मैं पहले समझता हूं त्रुटि, लेकिन मुझे बस इसे ठीक करने में समस्याएं आ रही हैं। दूसरी त्रुटि हालांकि मेरे लिए भ्रमित है। मेरा मालिक वास्तव में मेरी गर्दन को सांस ले रहा है, इसलिए किसी भी मदद की सराहना की जाएगी!

+0

सरणी शून्य आधारित हैं, 12 तत्व सरणी –

+0

में कोई अनुक्रमणिका 12 नहीं है, क्या आपने डेटा के लिए 'प्रिंट डेटा', ज़िप (outputs_l1, रंग) में रंग डालने का प्रयास किया है: यह देखने के लिए कि डेटा की प्रत्येक पंक्ति क्या दिखती है पसंद? ऐसा लगता है कि इसे जिस तरह से आप उम्मीद करते हैं उसमें प्रारूपित नहीं किया जा सकता है (आपकी धारणा यह है कि यह 14 तत्वों की सरणी होगी, ठीक है? ऐसा लगता है कि केवल 12 तत्व हैं) – zehnpaard

+0

जब मैं ' प्रिंट डेटा 'या' प्रिंट outputs_l1 'यह कहता है कि वे अमान्य वाक्यविन्यास हैं। और 14 तर्क हैं इसलिए अंतिम दो # 12 और # 13 होने जा रहे हैं, जो मैं ग्राफ के लिए बुला रहा हूं। और आप ऐसे किसी भी उदाहरण कहां देखते हैं जहां केवल 12 हैं? यह मेरी समस्या थी इससे पहले और मैंने सोचा कि मैंने इसे ठीक किया है, लेकिन शायद मुझे कुछ याद आया हो सकता है – Chris

उत्तर

25

मुझे लगता है कि समस्या त्रुटि संदेश में दी गई है, हालांकि यह पहचानना बहुत आसान नहीं है:

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

'बहुत सारे सूचकांक' का अर्थ है यदि आप बहुत अधिक सूचक मान दिया है। आपने 2 मान दिए हैं क्योंकि आप डेटा को 2 डी सरणी होने की उम्मीद कर रहे हैं। Numpy शिकायत कर रहा है क्योंकि data 2 डी नहीं है (यह या तो 1 डी या कोई नहीं है)।

यह अनुमान का एक सा है - मुझे आश्चर्य है कि अगर आप फ़ाइलफाइल में से एक फ़ाइल लोड को खाली फ़ाइल में भेजते हैं, या एक बुरी तरह से स्वरूपित है? यदि ऐसा है, तो आपको एक सरणी वापस मिल सकती है जो या तो 1 डी है, या यहां तक ​​कि खाली (np.array(None)Error नहीं फेंकता है, इसलिए आप कभी नहीं जानते ...)। यदि आप इस विफलता के खिलाफ सुरक्षा करना चाहते हैं, तो आप अपने loadfile फ़ंक्शन में कुछ त्रुटि जांच कर सकते हैं।

मैं अत्यधिक अपने for पाश डालने में सलाह देते हैं:

print(data) 

यह अजगर 2.x या 3.x में काम करेंगे और इस मुद्दे का स्रोत प्रकट कर सकता है। आपको अच्छी तरह से पता चल सकता है कि यह आपकी outputs_l1 सूची (यानी एक फ़ाइल) का केवल एक मान है जो समस्या दे रहा है।

संबंधित मुद्दे