He cargado una de MATLAB .mat archivo a través de scipy.io.loadmat y me dio una lista de numpy.void objetos.

Alguien me puede decir qué son, cómo se pueden utilizar y donde puedo conseguir alguna referencia documentación en ellos?

InformationsquelleAutor Felix | 2014-08-11

1 Comentario

  1. 57

    De acuerdo a la numpy documentación: http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html, numpy.void tipos se definen como flexible tipos de datos. Básicamente, estos son los tipos de datos donde no hay ningún pre-definido el tipo asociado a la variable(s) que usted está buscando. Si usted mira numpy, usted tiene tipos de datos, tales como float, uint8, bool, string, etc.

    void es para acomodar más genérico y flexible de tipos y son para aquellos tipos de datos que no es necesario caer en cualquiera de estos pre-tipos de datos definidos. Esta situación se encuentra principalmente cuando se carga en un struct donde cada elemento tiene varios tipos de datos asociados con varios campos. Cada elemento de la estructura que podría tener una combinación de diferentes tipos de datos, y la fusión de todos estos tipos de datos para representar una instancia de este elemento de la estructura nos lleva así a numpy.void.

    Con la documentación, que sin duda puede hacer las mismas operaciones como haría con cualquier otro tipo de datos. Echa un vistazo a la generic métodos de tipo de datos aquí: http://docs.scipy.org/doc/numpy/reference/generated/numpy.generic.html#numpy.generic . De hecho, todos los numpy tipos de datos que se derivan de esta clase genérica, incluyendo numpy.void.

    En el primer enlace que te puse al principio de este post, que muestra un buen ejemplo de cómo crear un tipo de registro personalizado, donde un registro es una combinación de una tupla de números y una cadena. Al crear una lista de estos registros, cada tipo en la lista es de tipo numpy.void y demuestra que un registro de este tipo de datos. Sin embargo, tenga en cuenta que esta lista tiene un tipo de datos que es de este registro, pero cada elemento de esta lista será de tipo numpy.void.


    Sin embargo, como una cuestión de auto-contención, vamos a volver a crear el ejemplo aquí: Vamos a crear un tipo de registro personalizado donde tiene dos campos asociados para cada variable que se cree:

    • De 16 bits de la cadena con un campo denominado name
    • 2-elemento de la tupla de números de punto flotante de 64-bits cada uno, con un campo denominado grades

    Como tal, tendría que hacer algo como:

    import numpy as np
    dt = np.dtype([('name', np.str_, 16), ('grades', np.float64, (2,))])

    Como tal, vamos a crear un ejemplo de una lista de dos elementos y crear instancias de sus campos:

    x = np.array([('Sarah', (8.0, 7.0)), ('John', (6.0, 7.0))], dtype=dt)

    Porque hemos hecho esta lista en un numpy.array, esperamos que su tipo de datos a ser así:

    type(x)

    Obtenemos:

    <type 'numpy.ndarray'>

    Recuerde, la lista en sí es un numpy.array, pero no los elementos individuales.


    Para acceder al segundo elemento de esta lista, que es el segundo registro, hacemos:

    x[1]

    Obtenemos:

    ('John', [6.0, 7.0])

    Para comprobar el tipo de el segundo registro, hacemos:

    type(x[1])

    Obtenemos:

    <type 'numpy.void'> # As expected

    Algunos bonos adicionales para usted

    Para acceder al nombre del segundo registro, hacemos:

    x[1]['name']

    Obtenemos:

    'John'

    Para acceder a los grados del segundo registro, hacemos:

    x[1]['grades']

    Obtenemos:

    array([ 6.,  7.])

    Para comprobar el tipo de el nombre dentro del segundo registro, hacemos:

    type(x[1]['name'])

    Obtenemos:

    <type 'numpy.string_'>

    Para comprobar el tipo de los grados en el interior del segundo registro, hacemos:

    type(x[1]['grades'])

    Obtenemos:

    <type 'numpy.ndarray'>

    Tomar en cuenta que cada elemento de esta lista es de tipo numpy.void. Sin embargo, los campos individuales para cada elemento en la lista es una tupla de números, o una cadena. El colección de estos elementos es de tipo numpy.void.

    • Su descripción de flexible dtypes es engañosa. Flexible significa, simplemente, que itemsize varía. Un str_ también es flexible dtype.
    • Además, hay un segundo tipo de np.void que no tiene ningún .names – que es sólo una porción de las primas de memoria (bytes, pero no np.bytes_ que es terminada en null) – así np.array([b'123'], np.void) es válido

Dejar respuesta

Please enter your comment!
Please enter your name here