Как получить тип переменной в MATLAB?


188

Имеет ли MATLAB функцию / оператор, который указывает тип переменной (аналогично typeofоператору в JavaScript)?

Ответы:



70

class() функция является эквивалентом typeof()

Вы также можете использовать, isa()чтобы проверить, является ли переменная определенного типа. Если вы хотите , чтобы быть еще более точным, вы можете использовать ischar(), isfloat(), iscell()и т.д.


44

Еще одна связанная функция whos. В нем будут перечислены все виды информации (размеры, размер байта, тип) для переменных в данной рабочей области.

>> 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
Функция ВОЗ не перечисляет размер переменных. Из-за этого намного быстрее, если ваше рабочее пространство переполнено.
— JaBe

27

Будьте осторожны при использовании isaфункции. Это будет верно, если ваш объект имеет указанный тип или один из его подклассов. Вы должны использовать strcmpс classфункцией для тестирования , если объект является конкретно этим типом и не подкласс.


5

Поскольку никто не упомянул об этом, в MATLAB также есть metaclassфункция, которая возвращает объект с различными битами информации о переданном объекте. Этиmeta.class объекты могут быть полезны для тестов наследования (через общие операторы сравнения).

Например:

>> 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

Мы можем видеть, что class(someObj)эквивалентно Nameполю результата metaclass(someObj).


0

MATLAB - Проверка типа переменных

class () работает точно так же, как оператор typeof в Javascript .

Чтобы получить более подробную информацию о переменных , которые можно использовать WHOS команду или Whos () функцию.

Вот пример кода, выполняемого в командном окне 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
Это ничего не добавляет к принятому в настоящее время ответу.
— Rayryeng
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.