una transpuesta multiplicar matriz matrices funciones elementos ejemplos crear con arreglos array agregar python numpy

python - transpuesta - numpy funciones



¿Cómo averiguo si una matriz numpy contiene números enteros? (5)

Sé que hay una solución simple para esto, pero parece que no puede encontrarlo en este momento.

Dada una matriz numpy, necesito saber si la matriz contiene enteros.

Comprobar el tipo de letra per-se no es suficiente, ya que hay varios int dtypes (int8, int16, int32, int64 ...).


¡Lo encontré en el libro numpy ! Página 23:

Los otros tipos en la jerarquía definen categorías particulares de tipos. Estas categorías pueden ser útiles para probar si el objeto devuelto por self.dtype.type es de una clase particular (usando issubclass).

issubclass(n.dtype(''int8'').type, n.integer) >>> True issubclass(n.dtype(''int16'').type, n.integer) >>> True


Esto también funciona:

n.dtype(''int8'').kind == ''i''


La comprobación de un tipo de entero no funciona para flotantes que son enteros, por ejemplo, 4. mejor solución es np.equal(np.mod(x, 1), 0) , como en:

>>> import numpy as np >>> def isinteger(x): ... return np.equal(np.mod(x, 1), 0) ... >>> foo = np.array([0., 1.5, 1.]) >>> bar = np.array([-5, 1, 2, 3, -4, -2, 0, 1, 0, 0, -1, 1]) >>> isinteger(foo) array([ True, False, True], dtype=bool) >>> isinteger(bar) array([ True, True, True, True, True, True, True, True, True, True, True, True], dtype=bool) >>> isinteger(1.5) False >>> isinteger(1.) True >>> isinteger(1) True


La función issubdtype () de Numpy se puede usar de la siguiente manera:

import numpy as np size=(3,3) A = np.random.randint(0, 255, size) B = np.random.random(size) print ''Array A:/n'', A print ''Integers:'', np.issubdtype(A[0,0], int) print ''Floats:'', np.issubdtype(A[0,0], float) print ''/nArray B:/n'', B print ''Integers:'', np.issubdtype(B[0,0], int) print ''Floats:'', np.issubdtype(B[0,0], float)

Resultados:

Array A: [[ 9 224 33] [210 117 83] [206 139 60]] Integers: True Floats: False Array B: [[ 0.54221849 0.96021118 0.72322367] [ 0.02207826 0.55162813 0.52167972] [ 0.74106348 0.72457807 0.9705301 ]] Integers: False Floats: True

PD. Tenga en cuenta que los elementos de una matriz son siempre del mismo tipo de datos.


Si bien la respuesta aceptada a partir de 2009 sigue siendo válida, existe una solución nueva y mejorada a partir de Numpy v0.19, lanzada en septiembre de 2014:

Todos los tipos numpy numéricos ahora están registrados con la jerarquía de tipos en el módulo de números python.

Esto permite verificar el dtype contra las clases base abstractas Numéricas de Python.

isinstance(np.dtype(''int8''), numbers.Integral) issubclass(np.dtype(''int32'').type, numbers.Integral)

Puede probar contra numbers.Complex numbers.Real numbers.Complex , numbers.Integral . numbers.Real y numbers.Integral . numbers.Integral .

PD Como ya no necesita acceder a .type , ahora puede acortar su línea con unos pocos caracteres. ;)