Tablice komórkowe. Tworzenie i wykorzystanie

Contents

Tworzenie przez {}

a{1,1} = [1 3 -7; 2 0 6; 0 5 1]
a{1,2} = 'To jest łańcuch znakowy.'
a{2,1} = [3+4i -5; -10i 3-4i]
a{2,2} = []
a = 
    [3x3 double]    'To jest łańcuch...'    []
    [2x2 double]                        []    []
a = 
    [3x3 double]    'To jest łańcuch...'    []
    [2x2 double]                        []    []
a = 
    [3x3 double]    'To jest łańcuch...'    []
    [2x2 double]                        []    []
a = 
    [3x3 double]    'To jest łańcuch...'    []
    [2x2 double]                        []    []

Tworzenie przez ()

b(1,1) = {[1 3 -7; 2 0 6; 0 5 1]}
b(1,2) = {'To jest łańcuch znakowy.'}
b(2,1) = {[3+4i -5; -10i 3-4i]}
b(2,2) = {[]}
b = 
    [3x3 double]    'To jest łańcuch znakowy.'
    [2x2 double]                              []
b = 
    [3x3 double]    'To jest łańcuch znakowy.'
    [2x2 double]                              []
b = 
    [3x3 double]    'To jest łańcuch znakowy.'
    [2x2 double]                              []
b = 
    [3x3 double]    'To jest łańcuch znakowy.'
    [2x2 double]                              []
c = {[1,2], 17, [2;4]; 3-4i, 'hallo', eye(3)}
c = 
          [1x2 double]    [   17]    [2x1 double]
    [3.0000 - 4.0000i]    'hallo'    [3x3 double]

Tworzenie z użyciem funkcji cell

d = cell(2,2);

Prealokacja

type test_prealokacji
% Tworzenie tablicy bez prealokacji
clear A
maxvals = 100000;
tic
for ii=1:maxvals
    A{ii} = ['Element' int2str(ii)];
end
disp(['Czas jaki upłynął bez prealokacji = ' num2str(toc)]);

% Tworzenie tablicy z prealokacją
clear A
tic
A = cell(1,maxvals);
for ii=1:maxvals
    A{ii} = ['Element' int2str(ii)];
end
disp(['Czas jaki upłynął z prealokacją = ' num2str(toc)]);
test_prealokacji
Czas jaki upłynął bez prealokacji = 3.4625
Czas jaki upłynął z prealokacją = 3.2537

Ilustracja zawartości tablicy komórkowej

celldisp(a)
a{1,1} =
     1     3    -7
     2     0     6
     0     5     1
a{2,1} =
   3.0000 + 4.0000i  -5.0000 + 0.0000i
   0.0000 -10.0000i   3.0000 - 4.0000i
a{1,2} =
To jest łańcuch znakowy.
a{2,2} =
     []
a{1,3} =
     []
a{2,3} =
     []
celldisp(b)
b{1,1} =
     1     3    -7
     2     0     6
     0     5     1
b{2,1} =
   3.0000 + 4.0000i  -5.0000 + 0.0000i
   0.0000 -10.0000i   3.0000 - 4.0000i
b{1,2} =
To jest łańcuch znakowy.
b{2,2} =
     []
figure, cellplot(a), title('cell array ''a''')
figure, cellplot(b), title('cell array ''b''')

Rozszerzanie tablicy

a{3,3} = 5;
figure, cellplot(a), title('extended cell array ''a''')

Usuwanie komórek

a(3,:) = [];
figure, cellplot(a), title('cell array ''a'' after cells removal')

Konkatenacja tablic komórkowych

size(a)
ans =
     2     3
size(b)
ans =
     2     2
ab = [a b]
figure, cellplot(ab), title('concatenated cell arrays ''[a b]''')
ab = 
  Columns 1 through 4
    [3x3 double]    'To jest łańcuc...'    []    [3x3 double]
    [2x2 double]                       []    []    [2x2 double]
  Column 5
    'To jest łańcuc...'
                       []
ab = {a b}
figure, cellplot(ab), title('concatenated cell arrays '' {a b} ''')
ab = 
    {2x3 cell}    {2x2 cell}

Użycie danych w tablicy komórkowej

c = {[1 2 3 4 5 6 7 8 9 10; 11 12 13 14 15 16 17 18 19 20], 'dogs'; 'cats', 1i};
figure, cellplot(c), title('cell ''c''')
cc11 = c(1,1)  % odwołanie sie do komórki
cc11 = 
    [2x10 double]
c11 = c{1,1}  % odwołanie się do zawartości struktury danej zawartej w komórce
c11 =
     1     2     3     4     5     6     7     8     9    10
    11    12    13    14    15    16    17    18    19    20
c21 = c{2,1}
c1112 = c{1,1}(1,2)
c212 = c{2,1}(2)
c21 =
cats
c1112 =
     2
c212 =
a
cellrowvec = {struct('x',1,'y',11) 23 'a' 1:2:9 'hello'};
cellplot(cellrowvec)
cellrowvec{1:3}
crv1_3 = [cellrowvec{2:4}]
crv1_3 = {cellrowvec{2:4}}
[crv1 crv2 crv3] = cellrowvec{2:4}
ans = 
    x: 1
    y: 11
ans =
    23
ans =
a
crv1_3 =
a	
crv1_3 = 
    [23]    'a'    [1x5 double]
crv1 =
    23
crv2 =
a
crv3 =
     1     3     5     7     9

Tablice komórkowe łańcuchów znakowych

cellstring{1} = 'Jan Kowalski';
cellstring{2} = 'Mezczyzna';
cellstring{3} = 'Pesel 75021304562';
cellstring
figure, cellplot(cellstring)
cellstring = 
    'Jan Kowalski'    'Mezczyzna'    'Pesel 75021304562'
data = ['Jan     '; 'Kowalski']
data =
Jan     
Kowalski
length(data(1,:))
length(data(2,:))
ans =
     8
ans =
     8
dataCell = cellstr(data)
dataCell = 
    'Jan'
    'Kowalski'
length(dataCell{1,:})
length(dataCell{2,:})
ans =
     3
ans =
     8
nowe_data = char(dataCell)
nowe_data =
Jan     
Kowalski
length(nowe_data(1,:))
length(nowe_data(2,:))
ans =
     8
ans =
     8
joined_dataCell = strjoin(dataCell)
joined_dzisiaj = strjoin({'5','Kwiecień','2017'},'-')
joined_dataCell =
Jan Kowalski
joined_dzisiaj =
5-Kwiecień-2017
nowe_dataCell = strsplit(joined_dataCell)
nowe_dzisiaj = strsplit(joined_dzisiaj,'-')
nowe_dataCell = 
    'Jan'    'Kowalski'
nowe_dzisiaj = 
    '5'    'Kwiecień'    '2017'

Funkcje save i load

tab1 = magic(5)
tab2 = magic(12)
save magiczne tab1 tab2
tab1 =
    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9
tab2 =
   144     2     3   141   140     6     7   137   136    10    11   133
    13   131   130    16    17   127   126    20    21   123   122    24
    25   119   118    28    29   115   114    32    33   111   110    36
   108    38    39   105   104    42    43   101   100    46    47    97
    96    50    51    93    92    54    55    89    88    58    59    85
    61    83    82    64    65    79    78    68    69    75    74    72
    73    71    70    76    77    67    66    80    81    63    62    84
    60    86    87    57    56    90    91    53    52    94    95    49
    48    98    99    45    44   102   103    41    40   106   107    37
   109    35    34   112   113    31    30   116   117    27    26   120
   121    23    22   124   125    19    18   128   129    15    14   132
    12   134   135     9     8   138   139     5     4   142   143     1
iscellstr(dataCell)
ans =
     1

Inne złożone typy danych

Tablice kategoryczne (categorical) - dane jakościowe

Przechowują wartości ze zdefiowanego przez uzytkowika zbioru dyskretnego

ankieta = {'T','N','T','T','X','N','T','X','N','T','N','T','T','T'}
ca = categorical(ankieta)
answerOcurence = categories(ca)
answerOcurence = countcats(ca)
summary(ca)
ankieta = 
  Columns 1 through 11
    'T'    'N'    'T'    'T'    'X'    'N'    'T'    'X'    'N'    'T'    'N'
  Columns 12 through 14
    'T'    'T'    'T'
ca = 
  Columns 1 through 11
     T      N      T      T      X      N      T      X      N      T      N 
  Columns 12 through 14
     T      T      T 
answerOcurence = 
    'N'
    'T'
    'X'
answerOcurence =
     4     8     2
     N      T      X 
     4      8      2 

Dane porządkowe (ordinal)

goalsmet = {'Tue','Thu','Sat','Sun','Tue','Sun','Tue','Sat','Wed','Sat','Sun'}
goalsmet_ca = categorical(goalsmet)
summary(goalsmet_ca)
goalsmet = 
  Columns 1 through 8
    'Tue'    'Thu'    'Sat'    'Sun'    'Tue'    'Sun'    'Tue'    'Sat'
  Columns 9 through 11
    'Wed'    'Sat'    'Sun'
goalsmet_ca = 
  Columns 1 through 8
     Tue      Thu      Sat      Sun      Tue      Sun      Tue      Sat 
  Columns 9 through 11
     Wed      Sat      Sun 
     Sat      Sun      Thu      Tue      Wed 
       3        3        1        3        1 
daynames = {'Mon','Tue','Wed','Thu','Fri','Sat','Sun'}
ordgoalsmet = categorical(goalsmet,daynames,'Ordinal',true)
summary(ordgoalsmet)
ordgoalsmet(1)<ordgoalsmet(3)
ordgoalsmet(4)<ordgoalsmet(3)
daynames = 
    'Mon'    'Tue'    'Wed'    'Thu'    'Fri'    'Sat'    'Sun'
ordgoalsmet = 
  Columns 1 through 8
     Tue      Thu      Sat      Sun      Tue      Sun      Tue      Sat 
  Columns 9 through 11
     Wed      Sat      Sun 
     Mon      Tue      Wed      Thu      Fri      Sat      Sun 
       0        3        1        1        0        3        3 
ans =
     1
ans =
     0

Tabele

names = {'Harry','Sally','Jose'}
weights = [185; 133; 210]
heights = [74; 65.4; 72.2]
patients = table(weights,heights,'RowNames',names)
names = 
    'Harry'    'Sally'    'Jose'
weights =
   185
   133
   210
heights =
   74.0000
   65.4000
   72.2000
patients = 
             weights    heights
             _______    _______
    Harry    185          74   
    Sally    133        65.4   
    Jose     210        72.2   
patients(1:2,1)
patients({'Harry','Jose'},1)
matpat = patients{{'Harry','Jose'},1}
summary(patients)
ans = 
             weights
             _______
    Harry    185    
    Sally    133    
ans = 
             weights
             _______
    Harry    185    
    Jose     210    
matpat =
   185
   210
Variables:
    weights: 3x1 double
        Values:
            min       133      
            median    185      
            max       210      
    heights: 3x1 double
        Values:
            min       65.4     
            median    72.2     
            max         74     

Sortowanie

vec = [85 70 100 95 80 91]
vec = mysort(vec)
vec =
    85    70   100    95    80    91
vec =
    70    80    85    91    95   100
[vec_sorted] = sort(vec,'descend')
[vec_sorted ind_sorted] = sort(vec,'descend')
vec(ind_sorted)
vec_sorted =
   100    95    91    85    80    70
vec_sorted =
   100    95    91    85    80    70
ind_sorted =
     6     5     4     3     2     1
ans =
   100    95    91    85    80    70

Sortowanie łańcuchów znakowych

words = char('Hello','Holywood','Hi','Goodby','Ciao')
sort(words)
sort(words,2)
words_sorted = sortrows(words)
[words_sorted words_ind] = sortrows(words)
words =
Hello   
Holywood
Hi      
Goodby  
Ciao    
ans =
Ce      
Giad    
Hillb   
Holooo  
Hooywyod
ans =
   Hello
Hdlooowy
      Hi
  Gbdooy
    Caio
words_sorted =
Ciao    
Goodby  
Hello   
Hi      
Holywood
words_sorted =
Ciao    
Goodby  
Hello   
Hi      
Holywood
words_ind =
     5
     4
     1
     3
     2
words = {'Hello','Holywood','Hi','Goodby','Ciao'}
sort(words)
[words_sorted, words_ind] = sort(words)
words = 
    'Hello'    'Holywood'    'Hi'    'Goodby'    'Ciao'
ans = 
    'Ciao'    'Goodby'    'Hello'    'Hi'    'Holywood'
words_sorted = 
    'Ciao'    'Goodby'    'Hello'    'Hi'    'Holywood'
words_ind =
     5     4     1     3     2
words = {'Hello';'Holywood';'Hi';'Goodby';'Ciao'}
sort(words)
[words_sorted, words_ind] = sort(words)
words = 
    'Hello'
    'Holywood'
    'Hi'
    'Goodby'
    'Ciao'
ans = 
    'Ciao'
    'Goodby'
    'Hello'
    'Hi'
    'Holywood'
words_sorted = 
    'Ciao'
    'Goodby'
    'Hello'
    'Hi'
    'Holywood'
words_ind =
     5
     4
     1
     3
     2

Funkcje load i save

clear
load magiczne
tab = load('magiczne.mat')
tab = 
    tab1: [5x5 double]
    tab2: [12x12 double]
tabnazw = fieldnames(tab)
tabnazw{1}
tabnazw{2};
tabnazw = 
    'tab1'
    'tab2'
ans =
tab1
mat1e = eval(['tab.' tabnazw{1}])
mat2e = eval(['tab.' tabnazw{2}])
mat1e =
    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9
mat2e =
   144     2     3   141   140     6     7   137   136    10    11   133
    13   131   130    16    17   127   126    20    21   123   122    24
    25   119   118    28    29   115   114    32    33   111   110    36
   108    38    39   105   104    42    43   101   100    46    47    97
    96    50    51    93    92    54    55    89    88    58    59    85
    61    83    82    64    65    79    78    68    69    75    74    72
    73    71    70    76    77    67    66    80    81    63    62    84
    60    86    87    57    56    90    91    53    52    94    95    49
    48    98    99    45    44   102   103    41    40   106   107    37
   109    35    34   112   113    31    30   116   117    27    26   120
   121    23    22   124   125    19    18   128   129    15    14   132
    12   134   135     9     8   138   139     5     4   142   143     1
mat1e = getfield(tab,tabnazw{1})
mat2e = getfield(tab,tabnazw{2})
mat1e =
    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9
mat2e =
   144     2     3   141   140     6     7   137   136    10    11   133
    13   131   130    16    17   127   126    20    21   123   122    24
    25   119   118    28    29   115   114    32    33   111   110    36
   108    38    39   105   104    42    43   101   100    46    47    97
    96    50    51    93    92    54    55    89    88    58    59    85
    61    83    82    64    65    79    78    68    69    75    74    72
    73    71    70    76    77    67    66    80    81    63    62    84
    60    86    87    57    56    90    91    53    52    94    95    49
    48    98    99    45    44   102   103    41    40   106   107    37
   109    35    34   112   113    31    30   116   117    27    26   120
   121    23    22   124   125    19    18   128   129    15    14   132
    12   134   135     9     8   138   139     5     4   142   143     1
mat1 = tab.(tabnazw{1})
mat2 = tab.(tabnazw{2})
mat1 =
    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9
mat2 =
   144     2     3   141   140     6     7   137   136    10    11   133
    13   131   130    16    17   127   126    20    21   123   122    24
    25   119   118    28    29   115   114    32    33   111   110    36
   108    38    39   105   104    42    43   101   100    46    47    97
    96    50    51    93    92    54    55    89    88    58    59    85
    61    83    82    64    65    79    78    68    69    75    74    72
    73    71    70    76    77    67    66    80    81    63    62    84
    60    86    87    57    56    90    91    53    52    94    95    49
    48    98    99    45    44   102   103    41    40   106   107    37
   109    35    34   112   113    31    30   116   117    27    26   120
   121    23    22   124   125    19    18   128   129    15    14   132
    12   134   135     9     8   138   139     5     4   142   143     1

Koniec wykładu