2012-06-07 21 views

Respuesta

13

Aquí hay una sintaxis más simple:

np.matlib.identity(n) 

Y aquí es una sintaxis aún más simple que corre mucho más rápido:

In [1]: n = 1000 
In [2]: timeit np.matlib.identity(n) 
100 loops, best of 3: 8.78 ms per loop 
In [3]: timeit np.matlib.eye(n) 
1000 loops, best of 3: 695 us per loop 
+2

¿necesitas usar 'matlib'? no puedes hacer 'np.eye (n)'? 'matlib' produce específicamente matrices, a diferencia de las funciones numpy" normales "que producen matrices numpy. –

+0

Según la documentación, parece que np.eye no crea necesariamente matrices cuadradas. En cuanto a la ganancia de rendimiento con np.matlib.eye, no estoy seguro. – hlin117

5

no creo que hay una solución más simple . Puede hacerlo ligeramente más eficiente , sin embargo:

numpy.matrix(numpy.identity(n), copy=False) 

Esto evita innecesariamente la copia de los datos.

+2

nunca he utilizado 'np.identity', ojo siempre se utiliza .. ¿sabes lo que es la diferencia entre' np.eye' y éste? – wim

+0

@wim: No hay diferencia. 'numpy.eye()' es un poco más flexible. La interfaz de NumPy no está muy optimizada y existen muchas funciones con funcionalidad superpuesta. –

+2

@wim: de acuerdo con [docs] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.eye.html) 'np.eye' es como' np.identity' pero con funcionalidad. Puede especificar el tamaño de columna y cambiar la diagonal. –

4

también np.eye se puede utilizar para crear una matriz de identidad (A).

Por ejemplo,

>>> np.eye(2, dtype=int) 
array([[1, 0], 
     [0, 1]]) 
>>> np.eye(3, k=1) 
array([[ 0., 1., 0.], 
     [ 0., 0., 1.], 
     [ 0., 0., 0.]]) 
+0

¿Por qué esto es downvoted? –

+0

También me gustaría saber ... – mbdevpl

Cuestiones relacionadas