Jak uzyskać typ zmiennej w MATLAB?


188

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

Odpowiedzi:


231

Użyj classfunkcji

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

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.


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 

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


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


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               

>> 

3
Nie dodaje to niczego do obecnie akceptowanej odpowiedzi.
rayryeng
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.