[SciPy-user] How to "move" data within an array

Andrew Straw strawman at astraw.com
Wed Jul 4 15:05:28 EDT 2007


Another way to use a list of arrays is to it as a FIFO (First In First
Out): (However, I realize this won't work with your other requirements
such as sum()).

LoA = []

for new_array in new_array_source():
    LoA.append(new_array)
    if len(LoA) > 5:
        old_array = LoA.pop(0)

Andrew Smart wrote:
> Hi Lorenzo,
>  
> thanks for your 2cents. 
> 
> The pointer method isn't practical for my purposes: I want to have the
> ability to access the "historical" data within the engine on various ways,
> e.g. "price average of the last 3 periods", where the array itself stores
> still 5 periods. The pointer method would require to re-calculate the time
> axis and especially to manage the "wrap", like: current time row is 3, so "3
> periods back" would be rows 2, 1 and 5.
> 
> I would like to use the numpy functions as sum(), avg() etc. on the arrays,
> so having single 1d arrays (one row = one array) does not really make sense.
> 
> But thanks for the idea,
> Andrew
> ________________________________
> 
> 	Von: scipy-user-bounces at scipy.org
> [mailto:scipy-user-bounces at scipy.org] Im Auftrag von lorenzo bolla
> 	Gesendet: Mittwoch, 4. Juli 2007 11:33
> 	An: SciPy Users List
> 	Betreff: Re: [SciPy-user] How to "move" data within an array
> 	
> 	
> 	why not using a list of 1D arrays?
> 	but why do you want to physically move your rows? you can simply use
> an integer as a pointer to the row of the "current time": then you update
> this integer every timestep (+1), taking its "modulo 5" to cycle through the
> rows. 
> 	 
> 	my two cents.
> 	lorenzo.
> 	 
> 	On 7/4/07, Andrew Smart <subscriptions at smart-knowhow.de> wrote: 
> 
> 		Hi folks,
> 		
> 		I'm using numpy arrays for storing data which is generated
> within an engine.
> 		I'm using the topmost dimension as time axis: every row
> represents a full 
> 		set of data created by the engine while one round.
> 		
> 		Say: i have an array for storing prices (e.g. 10 different
> prices are
> 		generated within one engine round). I'm storing/using the
> last 5 rounds, so
> 		I get an array with the dimensions (5,10). 
> 		
> 		If the engine runs longer than 5 rounds I have to "remove"
> the oldest record
> 		and move the younger records one position back.
> 		
> 		Since I've a lot of such arrays I would like to use the most
> efficient 
> 		method avaiable in numpy. On a pure memory-orientated view
> this would be
> 		just to copy ("move") the memory blocks from the younger 4
> rows one row
> 		further, thus having the first row for the new data.
> 		
> 		In the C API I see some functions like copyswap() and
> memmove() which
> 		indicate that such operations are possible at the C API
> level. But I'm not
> 		sure the correct approach on the Python level.
> 		
> 		Taking slices may be one options - but the new slice will
> then occupy new 
> 		memory, causing memory fragmentation...
> 		Looping over all data items, all rows is time consuming and
> surely wasting
> 		resources...
> 		
> 		Any pointers/ideas?
> 		
> 		Thanks,
> 		Andrew
> 		
> 		
> 		_______________________________________________ 
> 		SciPy-user mailing list
> 		SciPy-user at scipy.org
> 		http://projects.scipy.org/mailman/listinfo/scipy-user
> 		
> 
> 
> 
> _______________________________________________
> SciPy-user mailing list
> SciPy-user at scipy.org
> http://projects.scipy.org/mailman/listinfo/scipy-user




More information about the SciPy-User mailing list