avoding the accumulation of array when using loop.

Isaac Won winefrog at gmail.com
Thu Jan 3 03:41:46 CET 2013


On Wednesday, January 2, 2013 5:54:18 PM UTC-6, Dave Angel wrote:
> On 01/02/2013 05:21 PM, Isaac Won wrote:
> 
> > Hi all,
> 
> >
> 
> > Thanks to Hans, I have had a good progress on my problem. 
> 
> >
> 
> > Followings are Hans's Idea:
> 
> >
> 
> > import numpy as np 
> 
> >
> 
> > b = [] 
> 
> > c = 4 
> 
> > f = open("text.file", "r") 
> 
> >
> 
> > while c < 10: 
> 
> >         c = c + 1 
> 
> >
> 
> >
> 
> >         f.seek(0,0) 
> 
> >
> 
> >         for  columns in ( raw.strip().split() for raw in f ): 
> 
> >                 b.append(columns[c]) 
> 
> >
> 
> >         y = np.array(b, float) 
> 
> >         print c, y 
> 
> >
> 
> >
> 
> > It's a bit inefficient to read the same file several times. 
> 
> 
> 
> Don't bet on it.  The OS and the libraries and Python each do some
> 
> buffering, so it might be nearly as fast to just reread if it's a small
> 
> file.  And if it's a huge one, the list would be even bigger.  So the
> 
> only sizes where the second approach is likely better is the mid-size file.
> 
> 
> 
> > You might consider reading it just once.  For example: 
> 
> >
> 
> >
> 
> > import numpy as np 
> 
> >
> 
> > b = [] 
> 
> >
> 
> >
> 
> >
> 
> > f = open("text.file", "r") 
> 
> >
> 
> > data = [ line.strip().split() for line in f ] 
> 
> > f.close() 
> 
> >
> 
> > for c in xrange(5, 11): 
> 
> >         for row in data: 
> 
> >                 b.append(row[c]) 
> 
> >
> 
> >
> 
> >         y = np.array(b, float) 
> 
> >         print c, y 
> 
> > -------------------------------------------------------------------------------
> 
> >
> 
> > It is a great idea, but I found some problems. I want each individual array of y. However, these two codes prodce accumulated array such as [1,2,3], [1,2,3,4,5,6], [1,2,3,4,5,6,7,8,9] and so on. I have tried to initialize for loop for each time to produce array. This effort has not been very successful.
> 
> > Do you guys have any idea? I will really appreciate ant help and idea.
> 
> 
> 
> Your description is very confusing.  But i don't see why you just don't
> 
> just set b=[] inside the outer loop, rather than doing it at the begin
> 
> of the program.
> 
> 
> 
> for c in xrange(5, 11): 
> 
>         b = []
> 
>         for row in data: 
> 
>                 b.append(row[c]) 
> 
> 
> 
> 
> 
> 
> 
> -- 
> 
> 
> 
> DaveA

Hi Dave,

I really appreciate your advice. It was really helpful.

Isaac



More information about the Python-list mailing list