Как получить тип переменной в 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.