Att ta ut delmatriser och att skapa matriser från delar

Att ta ut delar med indexvektorer
Logiska vektorer som index
Att skapa matriser från delar


Att ta ut delar med indexvektorer

>> v = 0.1 + (1:7)   % skapa lite data
v =
    1.1    2.1    3.1    4.1    5.1    6.1    7.1

>> v(2:4)           
% tag ut element 2 till och med 4
ans =
    2.1    3.1    4.1

>> v(1:3:7)          % tag ut en delvektor, 1:3:7 = [1 4 7]
ans =
    1.1    4.1    7.1

>> M = magic(5)
      % skapa lite data
M =
    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

>> M(:, 2)           % tag ut andra kolonnen
ans =
    24
     5
     6
    12
    18

>> M(3, :)           % tredje raden
ans =
     4     6    13    20    22

>> M([2 5], :)       % bilda en matris av 2:a och 5-e raderna
ans =
    23     5     7    14    16
    11    18    25     2     9

>> M([2 5], [2 4])   % 2 x 2-matrisen [M(2, 2), M(2, 4); M(5, 2), M(5, 4)]
ans =
     5    14
    18     2

>> M(:, end)         % sista kolonnen (end måste stå som index)
ans =
    15
    16
    22
     3
     9

>> M(end, :)         % sista raden
ans =
    11    18    25     2     9

>> M(end, end)       % elementet i sista raden och kolonnen
ans =
     9

>> M([1 3], [end-3:end])  % lite svårare
ans =
    24     1     8    15
     6    13    20    22

>> M(:, end:-1:1)    % permutation av kolonnerna
ans =
    15     8     1    24    17
    16    14     7     5    23
    22    20    13     6     4
     3    21    19    12    10
     9     2    25    18    11

>> M([1 3], [2 4]) = 100  % man kan göra tilldelningar också
M =
    17   100     1   100    15
    23     5     7    14    16
     4   100    13   100    22
    10    12    19    21     3
    11    18    25     2     9

>> M([1 3], [2 4]) = 100 * [1 2; 3 4]
M =
    17   100     1   200    15
    23     5     7    14    16
     4   300    13   400    22
    10    12    19    21     3
    11    18    25     2     9


Logiska vektorer som index

>> v = 0.1 + (1:7)  % skapa lite data
v =
    1.1    2.1    3.1    4.1    5.1    6.1    7.1

>> v > 4            % 0 = falskt, 1 = sant
ans =
     0     0     0     1     1     1     1

>> v(v > 4)         % tag ut de värden som svarar mot sant
ans =
    4.1    5.1    6.1    7.1

>> v([0 0 0 1 1 1 1])  % fel datatyp
??? Subscript indices must either be real positive
    integers or logicals.

>> v(logical([0 0 0 1 1 1 1]))  % konvertera till typen logical
ans =
    4.1    5.1    6.1    7.1

>> v(2 < v & v < 5)  % värden större än 2 och mindre än 5
ans =
    2.1    3.1    4.1

>> v(v <= 2.1 | 6 <= v) % mindre lika med 2.1 eller större lika med 6
ans =
    1.1    2.1    6.1    7.1

>> sum(v ~= 3.1)    % == likhet, ~= skild från
ans =              
     6

>> any(v ~= 3.1)    % något värde skilt från 3.1
ans =
     1

>> all(v ~= 3.1)    % alla skilda från
ans =
     0

>> all(v ~= 3.5)
ans =
     1

>> find(v > 4)      % find returnerar index i stället för 0, 1
ans =
     4     5     6     7

Att skapa matriser från delar
Man skriver ungefär som när man skapar matriser av tal. Komma eller blank för at byta kolonn och ; för att byta rad. Här föjer några exempel. När man sätter ihop matriser i rader (kolonner) måste delarna pasa ihop storleksmässigt.

>> A = [1 2; 3 4]
A =
     1     2
     3     4

>> B = [5 6; 7 8]
B =
     5     6
     7     8

>> C = [A, B]
C =
     1     2     5     6
     3     4     7     8

>> C = [A; B]
C =
     1     2
     3     4
     5     6
     7     8

>> C = [A, B'; A-B, A']
C =
     1     2     5     7
     3     4     6     8
    -4    -4     1     3
    -4    -4     2     4

>> C = [A, [-1; 2]; [3 5 1]]
C =
     1     2    -1
     3     4     2
     3     5     1

Back