Komórki (cell, cellstr) są formą danych służącą raczej przechowywaniu różnych form danych o zróżnicowanych rozmiarach w postaci jednej zmiennej niż uczestniczeniu bezpośrednio w działaniach arytmetycznych. Przed wykonaniem obliczeń na danych przechowywanych w komórkach, należy liczyć się więc z koniecznością konwersji danych z postaci komórki do postaci tablicy („wydobycia” danych z komórki). Komórki są również niezwykle przydatne podczas importu danych do Octave’a lub np. tworzenia ramek danych. Prostokątny zbiór komórek nazywamy tablicą komórek.
TWORZENIE KOMÓREK BĄDŹ TABLIC KOMÓREK
Przy użyciu funkcji cell
Funkcja cell wywołana z pojedynczym argumentem zwróci kwadratową tablicę komórek (pustą).
>> A = cell(2)
A =
{
[1,1] = [](0x0)
[2,1] = [](0x0)
[1,2] = [](0x0)
[2,2] = [](0x0)
}
>> size(A)
ans =
2 2
Funkcja cell wywołana z parą argumentów, zwróci prostokątną tablicę komórek (pustą), o określonych wymiarach.
>> A = cell(2,3)
A =
{
[1,1] = [](0x0)
[2,1] = [](0x0)
[1,2] = [](0x0)
[2,2] = [](0x0)
[1,3] = [](0x0)
[2,3] = [](0x0)
}
>> size(A)
ans =
2 3
Przy użyciu funkcji cellstr
Funkcja cellstr z podanym argumentem tekstowym zwróci pojedynczą komórkę, zawierającą podany tekst.
>> A = cellstr('Jan Kowalski')
A =
{
[1,1] = Jan Kowalski
}
>> size(A)
ans =
1 1
Natomiast każdy wiersz argumentu tekstowego zapamiętany będzie w kolejnym wierszu tablicy komórek.
>> A = cellstr(['Jan Kowalski']')
A =
{
[1,1] = J
[2,1] = a
[3,1] = n
[4,1] =
[5,1] = K
[6,1] = o
[7,1] = w
[8,1] = a
[9,1] = l
[10,1] = s
[11,1] = k
[12,1] = i
}
>> size(A)
ans =
12 1
Przy użyciu pary nawiasów klamrowych '{}’
Tworzona jest komórka, której zawartość stanowi użyty argument.
>> A = {[1 2 3;4 5 6]}
A =
{
[1,1] =
1 2 3
4 5 6
}
>> size(A)
ans =
1 1
>> A = {'Jan Kowalski'}
A =
{
[1,1] = Jan Kowalski
}
>> size(A)
ans =
1 1
KONWERSJA DANYCH Z KOMÓRKI (TABLICY KOMÓREK) DO TABLICY (liczbowej bądź znakowej)
Konwersja przy pomocy funkcji char
Ten rodzaj konwersji stosuje się często do „wydobywania” tekstu z komórek tekstowych.
>> A = cellstr('Jan Kowalski')
A =
{
[1,1] = Jan Kowalski
}
>> char(A)
ans = Jan Kowalski
>> whos
Attr Name Size Bytes Class
==== ==== ==== ===== =====
A 1x1 12 cell
ans 1x12 12 char
Konwersja przy użyciu funkcji cell2mat
Ten rodzaj konwersji stosuje się często, aby „wydobyć” dane liczbowe z komórki (tablicy komórek) do tablicy liczbowej.
>> A = {[1 2 3;4 5 6]}
A =
{
[1,1] =
1 2 3
4 5 6
}
>> cell2mat(A)
ans =
1 2 3
4 5 6
>> whos
Attr Name Size Bytes Class
==== ==== ==== ===== =====
A 1x1 48 cell
ans 2x3 48 double
Konwersja danych przy użyciu pary nawiasów klamrowych '{}’
>> A = {[1 2 3;4 5 6]}
A =
{
[1,1] =
1 2 3
4 5 6
}
>> size(A)
ans =
1 1
>> A{1,1}
ans =
1 2 3
4 5 6
>> whos
Attr Name Size Bytes Class
==== ==== ==== ===== =====
A 1x1 48 cell
ans 2x3 48 double
INDEKSOWANIE TABLIC KOMÓREK
Przykłady z części KONWERSJA DANYCH Z KOMÓRKI (TABLICY KOMÓREK) DO TABLICY (numerycznej bądź znakowej) pokazały, że para nawiasów klamrowych '{}’ umożliwia „wydobycie” danych z komórki i zapamiętanie ich w postaci tablicy (numerycznej lub znakowej). Oczywiście, to „wydobycie” nie musi obejmować całej zmiennej.
>> A = {'1', '2', '3'; 'x', 'y', 'z'; '4', '5', '6'}
A =
{
[1,1] = 1
[2,1] = x
[3,1] = 4
[1,2] = 2
[2,2] = y
[3,2] = 5
[1,3] = 3
[2,3] = z
[3,3] = 6
}
>> A{2,1}
ans = x
>> whos
Attr Name Size Bytes Class
==== ==== ==== ===== =====
A 3x3 9 cell
ans 1x1 1 char
Natomiast indeksowanie przy pomocy pary nawiasów okrągłych '()’ powoduje odczyt podzbioru tablicy komórek i zapamiętanie go jako komórki (tablicy komórek).
>> A(2,1)
ans =
{
[1,1] = x
}
>> whos
Attr Name Size Bytes Class
==== ==== ==== ===== =====
A 3x3 9 cell
ans 1x1 1 cell
Indeksowanie umożliwia nie tylko podgląd określonego zakresu zmiennej, ale również zapisywanie treści do jakiegoś ustalonego zakresu tej zmiennej. Poniżej pokazano składnię polecenia, które przypisuje wartość zero (0) do pierwszej i trzeciej kolumny tablicy komórek, przechowywanej w zmiennej A.
>> A = {'1', '2', '3'; 'x', 'y', 'z'; '4', '5', '6'}
A =
{
[1,1] = 1
[2,1] = x
[3,1] = 4
[1,2] = 2
[2,2] = y
[3,2] = 5
[1,3] = 3
[2,3] = z
[3,3] = 6
}
>> A(:,[1,3]) = {0}
A =
{
[1,1] = 0
[2,1] = 0
[3,1] = 0
[1,2] = 2
[2,2] = y
[3,2] = 5
[1,3] = 0
[2,3] = 0
[3,3] = 0
}
USUWANIE ELEMENTÓW ORAZ ZAWARTOŚCI TABLIC KOMÓREK
Tak jak w przypadku tablic numerycznych lub znakowych, elementy tablic komórek mogą być usunięte przy użyciu symbolu pustej tablicy '[]’.
>> A = {'1', '2', '3'; 'x', 'y', 'z'; '4', '5', '6'}
A =
{
[1,1] = 1
[2,1] = x
[3,1] = 4
[1,2] = 2
[2,2] = y
[3,2] = 5
[1,3] = 3
[2,3] = z
[3,3] = 6
}
>> size(A)
ans =
3 3
>> A(1,:) = []
A =
{
[1,1] = x
[2,1] = 4
[1,2] = y
[2,2] = 5
[1,3] = z
[2,3] = 6
}
>> size(A)
ans =
2 3
Natomiast „opakowanie” symbolu pustej tablicy parą nawiasów klamrowych '{[]}’ spowoduje usunięcie zawartości wskazanego podzbioru zmiennej A, z jednoczesnym pozostawieniem miejsca na tę zawartość.
>> A = {'1', '2', '3'; 'x', 'y', 'z'; '4', '5', '6'}
A =
{
[1,1] = 1
[2,1] = x
[3,1] = 4
[1,2] = 2
[2,2] = y
[3,2] = 5
[1,3] = 3
[2,3] = z
[3,3] = 6
}
>> size(A)
ans =
3 3
>> A(1,:) = {[]}
A =
{
[1,1] = [](0x0)
[2,1] = x
[3,1] = 4
[1,2] = [](0x0)
[2,2] = y
[3,2] = 5
[1,3] = [](0x0)
[2,3] = z
[3,3] = 6
}
>> size(A)
ans =
3 3