¿Cómo obtener el tipo de una variable en MATLAB?


188

¿MATLAB tiene una función / operador que indique el tipo de una variable (similar al typeofoperador en JavaScript)?

Respuestas:


231

Usa la classfunción

>> b = 2
b =
     2
>> a = 'Hi'
a =
Hi
>> class(b)
ans =
double
>> class(a)
ans =
char

para condicionales:if ( string(class(b)) == 'double' ) fprintf(1, 'b is double'); end
Khaverim

70

class() la función es el equivalente de typeof()

También puede usar isa()para verificar si una variable es de un tipo particular. Si quieres ser aún más específico, puede utilizar ischar(), isfloat(), iscell(), etc.


44

Otra función relacionada es whos. Enumerará todo tipo de información (dimensiones, tamaño de byte, tipo) para las variables en un espacio de trabajo dado.

>> a = [0 0 7];
>> whos a
  Name      Size            Bytes  Class     Attributes

  a         1x3                24  double              

>> b = 'James Bond';
>> whos b
  Name      Size            Bytes  Class    Attributes

  b         1x10               20  char 

1
La función de la OMS no enumera el tamaño de las variables. Por eso es mucho más rápido si su espacio de trabajo está abarrotado.
JaBe

27

Tenga cuidado al usar la isafunción. Esto será cierto si su objeto es del tipo especificado o una de sus subclases. Tiene que usar strcmpcon la classfunción para probar si el objeto es específicamente ese tipo y no una subclase.


5

Como nadie lo mencionó, MATLAB también tiene la metaclassfunción, que devuelve un objeto con varios bits de información sobre la entidad transferida. Estos meta.classobjetos pueden ser útiles para pruebas de herencia (a través de operadores de comparación comunes).

Por ejemplo:

>> metaclass(magic(1))

ans = 

  class with properties:

                     Name: 'double'
              Description: ''
      DetailedDescription: ''
                   Hidden: 0
                   Sealed: 0
                 Abstract: 0
              Enumeration: 0
          ConstructOnLoad: 0
         HandleCompatible: 0
          InferiorClasses: {0×1 cell}
        ContainingPackage: [0×0 meta.package]
     RestrictsSubclassing: 0
             PropertyList: [0×1 meta.property]
               MethodList: [272×1 meta.method]
                EventList: [0×1 meta.event]
    EnumerationMemberList: [0×1 meta.EnumeratedValue]
           SuperclassList: [0×1 meta.class]

>> ?containers.Map <= ?handle

ans =

  logical

   1

Podemos ver que class(someObj)es equivalente al Namecampo del resultado de metaclass(someObj).


0

MATLAB - Comprobando el tipo de variables

class () funciona exactamente como el operador typeof de Javascript .

Para obtener más detalles acerca de las variables que se pueden utilizar whos comando o () whos función.

Aquí está el código de ejemplo ejecutado en la ventana de comandos de MATLAB R2017a .

>> % Define a number
>> num = 67

num =

    67

>> % Get type of variable num
>> class(num)

ans =

    'double'

>> % Define character vector
>> myName = 'Rishikesh Agrawani'

myName =

    'Rishikesh Agrwani'

>> % Check type of myName
>> class(myName)

ans =

    'char'

>> % Define a cell array
>> cellArr = {'This ', 'is ', 'a ', 'big chance to learn ', 'MATLAB.'}; % Cell array
>> 
>> class(cellArr)

ans =

    'cell'

>> % Get more details including type
>> whos num
  Name      Size            Bytes  Class     Attributes

  num       1x1                 8  double              

>> whos myName
  Name        Size            Bytes  Class    Attributes

  myName      1x17               34  char               

>> whos cellArr
  Name         Size            Bytes  Class    Attributes

  cellArr      1x5               634  cell               

>> % Another way to use whos i.e using whos(char_vector)
>> whos('cellArr')
  Name         Size            Bytes  Class    Attributes

  cellArr      1x5               634  cell               

>> whos('num')
  Name      Size            Bytes  Class     Attributes

  num       1x1                 8  double              

>> whos('myName')
  Name        Size            Bytes  Class    Attributes

  myName      1x17               34  char               

>> 

3
Esto no agrega nada a la respuesta actualmente aceptada.
rayryeng
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.