Wednesday, 15 August 2012

How can I average an array of arrays in python? -



How can I average an array of arrays in python? -

i have simulation runs on many times. each time array produced , insert larger array keeping track of data. illustration

record = [] in range(2): r = random.random() array = numpy.arange(20)*r array.shape = (10,2) record.append(array) record = numpy.array(record)

which produces:

[[[ 0. 0.88765927] [ 1.77531855 2.66297782] [ 3.55063709 4.43829637] [ 5.32595564 6.21361492] [ 7.10127419 7.98893346] [ 8.87659274 9.76425201] [ 10.65191128 11.53957056] [ 12.42722983 13.3148891 ] [ 14.20254838 15.09020765] [ 15.97786693 16.8655262 ]] [[ 0. 0.31394919] [ 0.62789839 0.94184758] [ 1.25579677 1.56974596] [ 1.88369516 2.19764435] [ 2.51159354 2.82554274] [ 3.13949193 3.45344112] [ 3.76739031 4.08133951] [ 4.3952887 4.70923789] [ 5.02318709 5.33713628] [ 5.65108547 5.96503466]]]

since each array represents simulation in program. average 2 different arrays contained within record.

basically array same dimensions array average of individual runs.

i loop on arrays there lot of info in actual simulations think costly on time

example out set (obviously wouldn't zero):

average = [[0.0, 0.0] [0.0, 0.0] [0.0, 0.0] [0.0, 0.0] [0.0, 0.0] [0.0, 0.0] [0.0, 0.0] [0.0, 0.0] [0.0, 0.0] [0.0, 0.0]]

your record array illustration above 3 dimensional, shape:

>>> record.shape (2, 10, 2)

the first dimension corresponds 2 iterations of experiment. average them, need tell np.average thing along axis=0

>>> np.average(record, axis=0) array([[ 0. , 0.45688836], [ 0.91377672, 1.37066507], [ 1.82755343, 2.28444179], [ 2.74133015, 3.19821851], [ 3.65510686, 4.11199522], [ 4.56888358, 5.02577194], [ 5.4826603 , 5.93954865], [ 6.39643701, 6.85332537], [ 7.31021373, 7.76710209], [ 8.22399044, 8.6808788 ]])

if know beforehand how many simulations going run, improve off skipping list thing altogether , doing this:

simulations, sim_rows, sim_cols = 1000000, 10, 2 record = np.empty((simulations, sim_rows, sim_cols)) j in xrange(simulations) : record[j] = np.random.rand(sim_rows, sim_cols) >>> np.average(record, axis=0) [[ 0.50021935 0.5000554 ] [ 0.50019659 0.50009123] [ 0.50008591 0.49973058] [ 0.49995812 0.49973941] [ 0.49998854 0.49989957] [ 0.5002542 0.50027464] [ 0.49993122 0.49989623] [ 0.50024623 0.49981818] [ 0.50005848 0.50016798] [ 0.49984452 0.49999112]]

python arrays numpy average

No comments:

Post a Comment