Jak uzyskać typ zmiennej w MATLAB?

188

Czy MATLAB ma funkcję / operator, który wskazuje typ zmiennej (podobny do typeofoperatora w JavaScript)?

Dónal
źródło

Odpowiedzi:

231

Użyj classfunkcji

>> b = 2
b =
     2
>> a = 'Hi'
a =
Hi
>> class(b)
ans =
double
>> class(a)
ans =
char
Daniel LeCheminant
źródło
dla warunków:if ( string(class(b)) == 'double' ) fprintf(1, 'b is double'); end
khaverim
70

class() funkcja jest równoważna z typeof()

Możesz także użyć isa()do sprawdzenia, czy zmienna jest określonego typu. Jeśli chcesz być jeszcze bardziej szczegółowe, można użyć ischar(), isfloat(), iscell(), itd.

Dima
źródło
44

Inną powiązaną funkcją jest whos. Wyświetli wszystkie informacje (wymiary, rozmiar bajtu, typ) dla zmiennych w danym obszarze roboczym.

>> 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 
gnovice
źródło
1
Funkcja WHO nie podaje wielkości zmiennych. Z tego powodu jest znacznie szybciej, jeśli przestrzeń robocza jest zatłoczona.
JaBe
27

Zachowaj ostrożność podczas korzystania z tej isafunkcji. Będzie to prawdą, jeśli twój obiekt jest określonego typu lub jednej z jego podklas. Musisz użyć strcmptej classfunkcji do przetestowania, czy obiekt jest konkretnie tego typu, a nie podklasą.

Mike Katz
źródło
5

Ponieważ nikt o tym nie wspominał, MATLAB ma również metaclassfunkcję, która zwraca obiekt z różnymi bitami informacji o przekazywanej jednostce. meta.classObiekty te mogą być przydatne w testach dziedziczenia (za pomocą popularnych operatorów porównania).

Na przykład:

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

Widzimy, że class(someObj)jest to równoważne Namepolu wyniku metaclass(someObj).

Diabeł
źródło
0

MATLAB - Sprawdzanie typu zmiennych

class () działa dokładnie tak samo, jak operator typeof Javascript .

Aby uzyskać więcej informacji na temat zmiennych można używać kogo polecenie lub whos () funkcji.

Oto przykładowy kod wykonany w oknie poleceń 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               

>> 
Hygull
źródło
3
Nie dodaje to niczego do obecnie akceptowanej odpowiedzi.
rayryeng