In [2]:
from random import random

def random2d(n=1000):
    return [[random() for j in range(n)] for i in range(n)]

# now let's do 2d averaging
def average2d(a):
    # there's no way to tell how many elements
    # there are because each list in the list of lists
    # could be a different length
    n, s = 0, 0
    for row in a:
        for element in row:
            s += element
            n += 1
    return s / n

n = 3000

R = random2d(n)
average2d(R)


Out[2]:
0.5001795139728076

In [3]:
%%timeit

# how fast is this?
average2d(R)


1 loops, best of 3: 604 ms per loop

In [10]:
import numpy as np

R = np.random.uniform(size=(n,n))
R


Out[10]:
array([[ 0.16442591,  0.06019215,  0.13574315, ...,  0.95115628,
         0.32276626,  0.69702153],
       [ 0.31768723,  0.93409853,  0.34722531, ...,  0.52851659,
         0.36773928,  0.9316535 ],
       [ 0.91488032,  0.88127737,  0.87042717, ...,  0.85553466,
         0.30377961,  0.95292511],
       ..., 
       [ 0.86619297,  0.64068635,  0.0671692 , ...,  0.52829387,
         0.52078797,  0.13971299],
       [ 0.50046661,  0.2426449 ,  0.59872748, ...,  0.76729318,
         0.5692301 ,  0.74018849],
       [ 0.87473508,  0.64598814,  0.91931996, ...,  0.71743977,
         0.27391853,  0.18721739]])

In [11]:
np.mean(R)


Out[11]:
0.50023059066229336

In [12]:
%%timeit

np.mean(R)


100 loops, best of 3: 10.4 ms per loop