2012-09-06 19 views
7

का उपयोग कैसे करें मैंने इस (सरल) पायथन कोड पर उम्र बिताई है, और इस मंच के लिए धन्यवाद मैं लगभग वहां हूं। मुझे उम्मीद है कि कोई मुझे 100% काम करने के लिए सीधे सेट कर सकता है!numpy vstack

stokes_list = np.zeros(shape=(numrows,1024)) # 'numrows' defined earlier 
for i in range(numrows): 
    epoch_name = y['filename'][i] # 'y' is an array from earlier 
    os.system('pdv -t {0} > temp.txt '.format(epoch_name)) # 'pdv' is a command from another piece of software - here I copy the output into a temporary file 
    stokes_line = np.genfromtxt('temp.txt', usecols=3, dtype=[('stokesI','float')], skip_header=1) 
    stokes_list = np.vstack((stokes_line,stokes_line)) 

, तो मूल रूप से हर कोड के आसपास लूप होता है, stokes_line फ़ाइल 'temp.txt' से कॉलम (4 एक) में से एक खींचती है और:

सबसे पहले, यहाँ कोड के प्रासंगिक हिस्सा है मैं इसे हर बार 'stokes_list' में एक लाइन जोड़ना चाहता हूं।

उदाहरण के लिए

, अगर पहले stokes_line

1.1 2.2 3.3 

है और दूसरा

4.4 5.5 6.6 

तो stokes_list

1.1 2.2 3.3 
4.4 5.5 6.6 

हो जाएगा और आगे बढ़ते रहें जाएगा ...

यह इस समय काम नहीं कर रहा है क्योंकि मुझे लगता है कि बात यह है कि:

stokes_list = np.vstack((stokes_line,stokes_line)) 

सही नहीं है। यह केवल 2 सूचियों को ढेर कर रहा है - जो समझ में आता है क्योंकि मेरे पास केवल 2 तर्क हैं। मैं मूल रूप से जानना चाहता हूं कि मैं बार-बार ढेर कैसे रहता हूं।

कोई भी मदद बहुत आभारी रूप से प्राप्त की जाएगी!
यह आवश्यक है, तो यहां temp.txt फ़ाइल के स्वरूप का एक उदाहरण है:

File: t091110_065921.SFTC Src: J1903+0925 Nsub: 1 Nch: 1 Npol: 4 Nbin: 1024 RMS: 0.00118753 
0 0 0 0.00148099 -0.00143755 0.000931365 -0.00296775 
0 0 1 0.000647476 -0.000896698 0.000171287 0.00218597 
0 0 2 0.000704697 -0.00052846 -0.000603842 -0.000868739 
0 0 3 0.000773361 -0.00234724 -0.0004112 0.00358033 
0 0 4 0.00101559 -0.000691062 0.000196023 -0.000163109 
0 0 5 -0.000220367 -0.000944024 0.000181002 -0.00268215 
0 0 6 0.000311783 0.00191545 -0.00143816 -0.00213856 

उत्तर

32

vstack फिर ing और फिर से अच्छा नहीं है, क्योंकि यह प्रतियां पूरे सरणियों है।

इसे सामान्य पायथन list, .append बनाएं और उसके बाद इसे एक नया सरणी बनाने के लिए np.vstack पर पूरा करें।

stokes_list = [] 
for i in xrange(numrows): 
    ... 
    stokes_line = ... 
    stokes_list.append(stokes_line) 

big_stokes = np.vstack(stokes_list) 
+0

धन्यवाद - यह बहुत उपयोगी है – user1551817

+4

+1 "लूप में vstack मत डालें" के लिए। – mak

8

आप पहले से ही अब stokes_list सरणी के अंतिम आकार के बाद से आप numrows पता है। तो ऐसा लगता है कि आपको एक सरणी विकसित करने की आवश्यकता नहीं है (जो बहुत अक्षम है)। आप बस प्रत्येक पुनरावृत्ति पर सही पंक्ति असाइन कर सकते हैं। आप के द्वारा अपने अंतिम पंक्ति की जगह: अपने गैर काम कर लाइन के बारे में,

stokes_list[i] = stokes_line 

वैसे मुझे लगता है कि आप का मतलब:

stokes_list = np.vstack((stokes_list, stokes_line)) 

जहां अपनी नई मूल्य द्वारा stokes_list बदल रहे हैं।

+0

यह मेरे मुकाबले बेहतर समाधान है यदि 'numrows' पहले ज्ञात है (इस मामले में)। – eumiro

+0

धन्यवाद! एक दम बढ़िया! – user1551817

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