Cómo llegar a la matriz unitaria desde numpy.dot (A, A_inv)

Preparo una matriz de números aleatorios, calculo su inverso y la matriz lo multiplico con la matriz original. Esto, en teoría, da la matriz unitaria. Como puedo dejarnumpy hacer eso por mi

import numpy

A = numpy.zeros((100,100))
E = numpy.zeros((100,100))

size = 100

for i in range(size):
    for j in range(size):
        A[i][j]+=numpy.random.randint(10)
        if i == j:
            E[i][j]+=1

A_inv = numpy.linalg.linalg.inv(A)
print numpy.dot(A, A_inv)

Ejecutando el código produce

[me]machine @ numeric $ python rand_diag.py 
[[  1.00000000e+00  -7.99360578e-15  -1.14491749e-16 ...,   3.81639165e-17
   -4.42701431e-15   1.17961196e-15]
[ -5.55111512e-16   1.00000000e+00  -2.22044605e-16 ...,  -3.88578059e-16
    1.33226763e-15  -8.32667268e-16]

Es evidente que el resultado es una matriz unitaria, pero no precisamente, por lo queprint numpy.dot(A, A_inv) == E evidentemente daFalse. Estoy haciendo esto para practicar el álgebra lineal y tratar de encontrar el tamaño de la matriz para la cual mi máquina llega a sus límites. Conseguir unTrue Sería didácticamente atractivo.

Editar:

Ajustesize=10000Me quedo sin memoria

[me]machine @ numeric $ Python(794) malloc:
***mmap(size=800002048) failed (error code=12)
*** error: can\'t allocate region
*** set a breakpoint in malloc_error_break to debug
Traceback (most recent call last):
File "rand_diag.py", line 14, in <module>     A_inv = numpy.linalg.linalg.inv(A)
File "/Library/Frameworks/Python.framework/Versions/7.2/lib/python2.7/site-packages/numpy/linalg/linalg.py", line 445, in inv
return wrap(solve(a, identity(a.shape[0], dtype=a.dtype)))
File "/Library/Frameworks/Python.framework/Versions/7.2/lib/python2.7/site-packages/numpy/linalg/linalg.py", line 323, in solve
a, b = _fastCopyAndTranspose(t, a, b)
File "/Library/Frameworks/Python.framework/Versions/7.2/lib/python2.7/site-packages/numpy/linalg/linalg.py", line 143, in _fastCopyAndTranspose
cast_arrays = cast_arrays + (_fastCT(a),)
MemoryError

[1]+  Exit 1                  python rand_diag.py

¿Cómo puedo asignar más memoria y cómo puedo ejecutar esto en paralelo (tengo 4 núcleos)?

Respuestas a la pregunta(4)

Su respuesta a la pregunta