Macierz rzadka (sparse)

MetodaDeklaracja metodyPrzykład wywołaniaOpis działania
Utworzenie pustej macierzy rzadkiejsparse()sparse sTworzona jest pusta macierz rzadka
Utworzenie macierzy rzadkiej o zadanych rozmiarachsparse(int m,int n)sparse s(10,20)Tworzona jest macierz rzadka o wymiarach m x n (m wierszy, n kolumn)
Utworzenie macierzy rzadkiej na podstawie macierzy gęstejsparse(const matrix &mat)matrix m=zeros(5,5)
sparse s=sparse(m)
Tworzona jest macierz rzadka na podstawie macierzy gęstej.
W przykładzie tworzona jest macierz gęsta 'm', a następnie macierz rzadka 's'. Zarówno 'm' jak i 's' to macierze o wymiarach 5 x 5, wypełnione zerami.
Konwersja macierzy rzadkiej na macierz gęstąoperator matrix()sparse s=spzeros(5,5)
matrix m=matrix(s)
Tworzona jest macierz gęsta na podstawie macierzy rzadkiej.
W przykładzie tworzona jest macierz rzadka 's', a następnie macierz gęsta 'm'. Zarówno 's' jak i 'm' to macierze o wymiarach 5 x 5, wypełnione zerami.
Konwersja macierzy rzadkiej na liczbęoperator double()double(s)Macierz rzadka o wymiarach 1x1 zamieniana jest na liczbę rzeczywistą. Jeśli ma inne wymiary, pojawia się komunikat błędu
Liczba wierszyint size1(const sparse &a)
int nrow(const sparse &a)
size1(s)
nrow(s)
Zwraca liczbę wierszy macierzy
Liczba kolumnint size2(const sparse &a)
int ncol(const sparse &a)
size2(s)
ncol(s)
Zwraca liczbę kolumn macierzy
Liczba elementów niezerowych (istotnych)int nonzero(const sparse &a)nonzero(s)Zwraca liczbę niezerowych elementów macierzy
Czy zaindeksowanaint indexed(const sparse &a)indexed(s)Zwraca 1 (true), jeśli macierz ma indeks elementów; lub 0 (false), jeśli nie ma.
Najmniejszy wiersz istotnyint minrow(const sparse &a)minrow(s)Zwraca najmniejszy numer wiersza, w którym są elementy niezerowe
Największy wiersz istotnyint maxrow(const sparse &a)maxrow(s)Zwraca największy numer wiersza, w którym są elementy niezerowe
Najmniejsza kolumna istotnaint mincol(const sparse &a)mincol(s)Zwraca najmniejszy numer kolumny, w którym są elementy niezerowe
Największa kolumna istotnaint maxcol(const sparse &a)maxcol(s)Zwraca największy numer kolumny, w którym są elementy niezerowe
Czy element istniejeint iselem(int i,int j)iselem(2,7)Zwraca 1 (true), jeśli element (i,j) występuje w macierzy; 0 (false), jeśli nie występuje. Elementom macierzy rzadkiej, które nie występują, odpowiada wartość 0.
Czy element jest niezerowyint iszero(int,int)iszero(2,7)Zwraca 1 (true), jeśli element (i,j) macierzy ma wartość 0; 0 (false), w przeciwnym przypadku. True jest zwracane zarówno, gdy element nie występuje, jak i gdy występuje i przyjmuje wartość 0.
Indeksowanievoid mkindex()s.mkindex()Macierz jest indeksowana. Indeks ułatwia wyszukiwanie elementów istotnych, dzięki czemu operacje na macierzy są wykonywane szybciej.
Kasowanie indeksuvoid delindex()s.delindex()Indeks macierzy jest usuwany
Kopiowanie indeksu (niskopoziomowe)void cpyindex(const sparse &src)s.cpyindex(s2)Macierz otrzymuje indeks skopiowany z macierzy src. Wymagane jest, aby obie macierze (źródłowa i docelowa) miały te same wymiary; oprócz tego trzeba mieć pewność, że pozycje niezerowe w obu macierzach są na tych samych pozycjach.
Zmiana rozmiaruvoid resize(int m_new,int n_new)s.resize(5,10)Zmiana wymiarów macierzy. Po zmianie macierz ma m_new wierszy i n_new kolumn. Zawartość macierzy ulega skasowaniu.
Zmiana rozmiaru z zachowaniem zawartościvoid resizec(int m_new,int n_new)s.resizec(5,10)Zmiana wymiarów macierzy. Po zmianie macierz ma m_new wierszy i n_new kolumn. Zawartość macierzy jest zachowywana. Jeśli nowe wymiary są większe od pierwotnych, to elementy nie występujące w obiekcie pierwotnym pozostają niewypełnione.
Pakowanievoid pack()s.pack()Macierz jest pakowana. Po operacji pozostają tylko elementy istotne (niezerowe).
Odpakowanievoid unpack()s.unpack()Macierz jest rozpakowywana. Po operacji wszystkie elementy nieistotne są reprezentowane w obiekcie zerami.
Synchronizacjavoid synch(const sparse &src)s.synch(s2)Macierz jest synchronizowana z macierzą src. Uzgadniana jest kolejność elementów istotnych na liście, dzięki czemu operacje, których argumentami jest macierz źródłowa i uzgodniona, są wykonywane szybciej (patrz → arytmetyka macierzy zsynchronizowanych).
Dostęp do elementudouble & operator ()(int i,int j)s(2,3)Zwraca element z wiersza 'i' i kolumny 'j'.
Szybki dostęp do elementudouble get(int i,int j)s.get(2,3)Zwraca element z wiersza 'i' i kolumny 'j'. Funkcja działa szybciej niż operator ().
Szybkie wstawienie wartościvoid set(int i,int j,double d)s.set(2,3,11.5)Wstawia wartość 'd' do elementu z wiersza 'i' i kolumny 'j'. Funkcja działa szybciej niż operator ().
Dostęp do listy elementów (niskopoziomowo)double & operator [](int l)s[15]Zwraca element o numerze 'l' z listy elementów istotnych macierzy.
Macierz pustasparse spempty(int m,int n)spempty(5,3)Tworzenie pustej macierzy rzadkiej o wymiarach m x n.
Macierz zerowasparse spzeros(int m,int n)spzeros(5,3)Tworzenie macierzy rzadkiej o wymiarach m x n wypełnionej zerami.
Macierz jedynkowasparse spones(int m,int n)spones(5,3)Tworzenie macierzy rzadkiej o wymiarach m x n wypełnionej jedynkami.
Macierz identycznościowasparse speye(int m,int n)speye(5,3)Tworzenie macierzy rzadkiej o wymiarach m x n wypełnionej zerami, a na głównej przekątnej jedynkami.
Macierz testowasparse sptest(int m,int n)sptest(5,3)Tworzenie macierzy rzadkiej o wymiarach m x n wypełnionej wartościami testowymi (kolejne liczby naturalne)
Macierz losowasparse sprand(int m,int n)sprand(5,3)Tworzenie macierzy rzadkiej o wymiarach m x n wypełnionej liczbami z rozkładu jednostajnego z przedziału [0,1].
Wypełnianie zeramivoid zeros()s.zeros()Istotne elementy są zerowane
Wypełnianie jedynkamivoid ones()s.ones()Istotne elementy przyjmują wartość 1
Wypełnianievoid fill(double c=1.0)s.fill(2.0)Istotne elementy są wypełnianie stałą c
Wypełnianie zervoid fill0(double c=1.0)s.fill0(2.0)Istotne elementy wynoszące 0 są wypełnianie stałą c
Losowe wypełnianievoid rfill(double c=1.0)s.rfill(3.12)Istotne elementy są wypełnianie liczbą losową z rozkładu jednostajnego [0,c]
Losowe wypełnianie zervoid rfill0(double c=1.0)srfill0(1.5)Istotne elementy wynoszące 0 są wypełnianie liczbą losową z rozkładu jednostajnego [0,c]
Aplikowanie funkcji do elementówsparse forall(const sparse &s,double f(double))
void forall(double f(double))
forall(s,f1)
s.forall(f1)
Na elementy macierzy nakładana jest funkcja 'f'
Aplikowanie funkcji dwuargumentowej do elementówsparse forall(const sparse &s,double f(double,double),double d)
void forall(double f(double,double),double d)
sparse forall(const sparse &s,double f(double,int),int i)
void forall(double f(double,int),int i)
forall(s,f1,3.52)
s.forall(f1,3.52)
forall(s,f1,82)
s.forall(f1,82)
Na elementy macierzy nakładana jest funkcja dwuargumentowa 'f'. Drugi argument funkcji 'f' (parametr) jest przekazywany do funkcji forall.
Wartość bezwzględnasparse abs(const sparse &a)
void spabs()
abs(s)
s.spabs()
Tworzona jest macierz rzadka wypełniona wartościami bezwzględnymi elementów 'a'.
Podniesienie elementów do kwadratusparse sqr(const sparse &a)
void spsqr()
sqr(s)
s.spsqr()
Tworzona jest macierz rzadka wypełniona kwadratami elementów 'a'.
Sumadouble sum(const sparse &a)sum(s)Wyliczana jest suma wszystkich elementów macierzy 'a'.
Suma kwadratówdouble sumsqr(const sparse &a)sumsqr(s)Wyliczana jest suma kwadratów wszystkich elementów macierzy 'a'.
+, -sparse operator +(const sparse &a,const sparse &b)
void operator +=(const sparse &a)
void operator +=(const double d)
s1+s2
s1+=s2
s1+=10.0
Umożliwiają wykonywanie operacji arytmetycznych na dwóch macierzach rzadkich lub macierzy rzadkiej i liczbie rzeczywistej. Operacje +, - są wykonywane po pozycjach.
*, /sparse operator *(const sparse &a,const double d)
sparse operator *(const double d,const sparse &a)
void operator *=(const double d)
sparse operator *(const sparse &a,const sparse &b)
s1*10.0
10.0*s1
s1*=10.0
s1*s2
Umożliwiają wykonywanie operacji arytmetycznych na dwóch macierzach rzadkich lub macierzy rzadkiej i liczbie rzeczywistej. Operacje *, / są wykonywane po pozycjach.
Mnożenie macierzowesparse mul(const sparse &a,const sparse &b)mul(s1,s2)Mnożenie macierzowe
Dodawaniesparse spplus(const sparse &a,const sparse &b)spplus(s1,s2)Dodawanie macierzy: a+b
Zwiększanievoid addassign(const sparse &a)s.addassign(s2)Zwiększanie macierzy: baza=baza+a
Zwiększanie i mnożenie (wersja 1)void addassign(double d,const sparse &a)s.addassign(10.0,s2)Zwiększanie i mnożenie macierzy: baza=baza*d+a
Zwiększanie i mnożenie (wersja 2)void addassign(const sparse &a,double d)s.addassign(s2,10.0)Zwiększanie i mnożenie macierzy: baza=baza+a*d
Odejmowaniesparse spminus(const sparse &a,const sparse &b)spminus(s1,s2)Odejmowanie macierzy: a-b
Odejmowanie i mnożeniesparse spminus(const sparse &a,const sparse &b,double d)spminus(s1,s2,10.0)Odejmowanie macierzy: a-b*d
Zmniejszanievoid subassign(const sparse &a)s.subassign(s2)Zmniejszanie macierzy: baza=baza-a
Zmniejszanie i mnożenie (wersja 1)void subassign(double d,const sparse &a)s.subassign(10.0,s2)Zmniejszanie macierzy: baza=baza*d-a
Zmniejszanie i mnożenie (wersja 2)void subassign(const sparse &a,double d)s.subassign(s2,10.0)Zmniejszanie macierzy: baza=baza-a*d
Mnożeniesparse spmul(const sparse &a,const sparse &b)spmul(s1,s2)Możenie macierzy po pozycjach: a*b
Dzieleniesparse spdiv(const sparse &a,const sparse &b)spdiv(s1,s2)Dzielenie macierzy po pozycjach: a/b
Przesuwanie wierszyvoid shiftrows(int shift)s.shiftrows(2)Wiersze macierzy są przesuwane o 'shift'.
W przykładzie wiersze są przesuwane o 2 w dół.
Przesuwanie kolumnvoid shiftcols(int shift)s.shifcols(-3)Kolumny macierzy są przesuwane o 'shift'.
W przykładzie kolumny są przesuwane o 3 w lewo.
Wczytanieint readtxt(char *name,int show_open_err=1)s.readtxt("plik.txt")Wczytanie macierzy rzadkiej z pliku o nazwie 'name'. Parametr 'show_open_err' określa, czy błędy odczytu będą pokazywane. Funkcja „readtxt” zwraca 0, jeśli nie było błędów; i 1, jeśli był błąd odczytu.
Zapisanieint writetxt(char *name,int show_open_err=1)s.writetxt("plik.txt")Zapisanie macierzy rzadkiej do pliku o nazwie 'name'. Parametr 'show_open_err' określa, czy błędy zapisu będą pokazywane. Funkcja „writetxt” zwraca 0, jeśli nie było błędów; i 1, jeśli był błąd zapisu.
Wyświetlanievoid display(const char *name)s.display("X")Macierz rzadka jest wyświetlana w konsoli. Należy podać ‘name’ - nazwę, która ma być wyświetlona.
Listowanie elementówvoid list(const char *name)s.list("X")Lista elementów macierzy rzadkiej jest wyświetlana w konsoli. Należy podać ‘name’ - nazwę, która ma być wyświetlona.
Pokazanie indeksuvoid index(const char *name)s.index("X")Indeks macierzy rzadkiej jest wyświetlany w konsoli. Należy podać ‘name’ - nazwę, która ma być wyświetlona.
Wybór wierszasparse row(const sparse &a,int i)row(s,2)Z macierzy 'a' wybierany jest wiersz o numerze 'i'.
Transpozycjasparse operator ~(const sparse &a)
void T()
~s
s.T()
Transpozycja macierzy
Porównanieint compare(const sparse &a,const sparse &b)compare(s1,s2)Zwraca wynik porównania macierzy 'a' i 'b'. Jeśli jednakowe, zwraca 1 (true). Jeśli różne, zwraca 0 (false).
Kasowanievoid free()s.free()Macierz jest kasowana. Zwalniana jest pamięć, z której korzystała.