Lineární algebra s Matlabem Přednáška 4
Import/export dat Matlab podporuje velké množství formátů Matlab data (.mat) Text (.txt,.csv, ) Tabulky (.xls,.xlsx,.ods,...) XML Obrázky (.bmp,.gif,.jpg,.png, ) Audio (.wav,.flac,.ogg,.mp4, ) Video (.avi,.mpg,.mp4,.mov,...)... Lze použít buď specifické funkce, nebo univerzálního průvodce pro import
Import/export dat Průvodce pro import Několik možností vyvolání File > Import data Klik pravým na soubor > Import data Voláním uiimport
Import/export dat.mat soubory Soubor obsahující data z pracovního prostředí Matlabu Použití: save à matlab.mat save data.mat save( data.mat ) save( data.mat, a, b ) save( data, A, -ascii ) load matlab.mat load matlab.mat a load( data.mat, a ) whos file data.mat
Import/export dat fopen Otevře binární nebotextový soubor fileid = fopen(filename, permission) fileid = fopen( mujsoubor.m ); fread Čte data z binárního souboru A = fread(fileid); A = fread(fileid, M); A = fread(fileid, [M, N]);
Import/export dat fwrite Zapisuje data do binárního souboru fwrite(fileid, A) fwrite(fileid, A, precision) fscanf Čte data z textového souboru fscanf(fileid, formatspec, M) fscanf(fileid, formatspec, [M, N]) fprintf Formátovaný zápis do textového souboru fprintf(fileid, format, data) fclose(fileid) zavře soubor
Import/export dat Další možnosti dlmwrite zapíše matici do textového souboru dlmwrite(filename, M, delimiter) defaultní delimiter je čárka dlmread čte textový soubor do matice dlmread(filename) dlmread(filename, delimiter, [R1, C1, R2, C2])
Import/export dat Import obrázků Obrázky jsou většinou reprezentovány dvoudimenzionálnímpolem (maticí) Každý prvekmatice koresponduje jednomu pixelu obrázku Některé obrázky (např. RGB) jsou reprezentovány tří-dimenzionálnímpolem
Import/export dat Import obrázků Matlab podporuje import tří typů rastrových obrázků Indexované Matice c 3 s hodnotami Red, Green, Blue, double mezi 0 a 1 (colormap) Matice n m indexů do colormapy (image matrix) Image matrix může být typu double, uint8 nebo uint16 Použití: image(i); colormap(map);
Import/export dat Import obrázků Matlab podporuje import tří typů rastrových obrázků Obrázky ve škále šedi (intensity images) Každý prvekmatice odpovídá jendomu pixelu obrázku Matice může být typu double, uint8, uint16 Použití: imagesc(i, [0, 1]); colormap(gray);
Import/export dat Import obrázků Matlab podporuje import tří typů rastrových obrázků RGB obrázky Barva každého pixelu se skládá ze tří složek červené, zelené a modré Jsou reprezentovány tří-dimenzionálním polem m n 3 Př.: obrázek uložen v 3D poli RGB, složky barvy pixelu s indexem (10,5) jsou RGB(10, 5, 1) (červená), RGB(10, 5, 2) (zelená), RGB(10, 5, 3) (modrá) Obrázek lze zobrazit: image(rgb)
Import/export dat Import obrázků imread Načte obrázek z externího souboru (.jpeg,.tiff,.gif,.bmp,.png,.cur, hdf, ) A = imread(filename); [A, map] = imread(filename); [A, map, transparency] = imread(filename); imwrite Zapíše obrazová data do souboru. Použití imwrite(a, soubor.jpg ); ind2rgb Převede indexovaný obrázek na RGB obrázek iminfo Zobrazí informace o obrazovém souboru
Import/export dat Audio soubory audioread Načte data ze souborů typu.wav,.ogg,.flac,.mp3, mp4, [y, Fs] = audioread(filename) y je m n matice, kde m je počet vzorků, n je počet zvukových stop v souboru Fs je vzorkovací frekvence v Hz audiowrite Použití: audiowrite(filename, y, Fs);
Práce s řídkými maticemi Řešení velkého množství úloh vede na soustavy s maticí, která má málo nenulových prvků Řídké matice (sparse matrices) Hustota (density) = počet nenulových prvků / celkový počet prvků Efektivní ukládat pouze nenulové prvky Existuje několik formátů pro ukládání řídkých matic
Práce s řídkými maticemi Coordinate format (COO) Souřadnicová komprese Souřadnice + hodnota (i, j, v): (řádek, sloupec, hodnota) i j v
Práce s řídkými maticemi CSR formát Compressed Sparse Row hodnoty (A) reálné nebo komplexní pole obsahující prvky matice (po řádcích) indexyradku (IA) I-tý prvek vrací index v poli hodnoty prvku, který je prvním nenulovým prvkem v I-tém řádku matice A, na poslední pozici počet nenulových prvků + 1 sloupce (JA) J-tý prvek obsahuje index sloupce (v matici A) prvku na J-té pozici v poli hodnoty hodnoty = [2.0, 1.0, 3.0, 1.0, 4.0, 4.0, 1.0] indexyradku = [1, 3, 5, 6, 8] sloupce = [2, 3, 1, 4, 5, 1, 3] Poslední prvek je počet nenulových prvků v matici +1
Práce s řídkými maticemi CSR formát Compressed Sparse Row Pole indexyradku rozdělí pole hodnoty na řádky: (2.0, 1.0), (3.0, 1.0), (4.0), (4.0, 1.0) Pole sloupce přiřadí hodnoty v řádcích do sloupců: (0.0, 2.1, 1.0, 0.0, 0.0), (3.0, 0.0, 0.0, 1.0, 0.0), hodnoty = [2.0, 1.0, 3.0, 1.0, 4.0, 4.0, 1.0] indexyradku = [1, 3, 5, 6, 8] sloupce = [2, 3, 1, 4, 5, 1, 3] Poslední prvek je počet nenulových prvků v matici +1
Práce s řídkými maticemi CSR formát Příkladnásobení matice-vektor hodnoty = [2.0, 1.0, 3.0, 1.0, 4.0, 4.0, 1.0] indexyradku = [1, 3, 5, 6, 8] sloupce = [2, 3, 1, 4, 5, 1, 3]
Práce s řídkými maticemi CSR formát Compressed Sparse Row Varianta 2 hodnoty reálné nebo komplexní pole obsahující prvky matice (po řádcích) sloupce I-tý prvek obsahuje index sloupce (v matici A) prvku na I-té pozici v poli hodnoty ukazatela J-tý prvek vrací index v poli hodnoty prvku, který je prvním nenulovým prvkem v J-tém řádku matice A ukazatelb indexy řádků, tak že ukazatelb(j)-ukazatela(1) vrátí index posledního nenulového prvku v J-tém řádku matice A hodnoty = [2.0, 1.0, 3.0, 1.0, 4.0, 4.0, 1.0] sloupce = [2, 3, 1, 4, 5, 1, 3] ukazatela = [1, 3, 5, 6] ukazatelb = [3, 5, 6, 8]
Práce s řídkými maticemi CSC formát Compressed Sparse Column CSC(A) = CSR(A T ) Interní Matlab formát řídkých matic hodnoty (A) reálné nebo komplexní pole obsahující prvky matice (po řádcích) indexysloupcu (IA) I-tý prvek vrací index v poli hodnoty prvku, který je prvním nenulovým prvkem v I-tém sloupci matice A, na poslední pozici počet nenulových prvků + 1 radky (JA) J-tý prvek obsahuje index řádku (v matici A) prvku na J-té pozici v poli hodnoty hodnoty = [3.0 4.0 2.0 1.0 1.0 1.0 4.0] indexysloupcu = [1, 3, 4, 6, 7, 8] radky = [2, 4, 1, 1, 4, 2, 3] Poslední prvek je počet nenulových prvků v matici + 1
Práce s řídkými maticemi CSC formát Pole indexysloupců rozdělí pole hodnoty na sloupce: (3.0, 4.0), (2.0), (1.0, 1.0), (1.0), (4.0) Pole radky přiřadí hodnoty v sloupcích do řádků: (0.0, 3.0, 0.0, 4.0), (2.0, 0.0, 0.0, 0.0), hodnoty = [3.0 4.0 2.0 1.0 1.0 1.0 4.0] indexysloupcu = [1, 3, 4, 6, 7, 8] radky = [2, 4, 1, 1, 4, 2, 3] Poslední prvek je počet nenulových prvků v matici + 1
Práce s řídkými maticemi CSC formát Compressed Sparse Column Varianta 2 hodnoty reálné nebo komplexní pole obsahující prvky matice (po řádcích) radky I-tý prvek obsahuje index řádku (v matici A) prvku na I-té pozici v poli hodnoty ukazatela J-tý prvek vrací index v poli hodnoty prvku, který je prvním nenulovým prvkem v J-tém sloupci matice A ukazatelb indexy sloupců, tak že ukazatelb(j)-ukazatela(1) vrátí index posledního nenulového prvku v J-tém sloupci matice A hodnoty = [2.0, 1.0, 3.0, 1.0, 4.0, 4.0, 1.0] sloupce = [2, 3, 1, 4, 5, 1, 3] ukazatela = [1, 3, 5, 6] ukazatelb = [3, 5, 6, 8]
Řídké matice v Matlabu Nejsou vytvářeny automaticky Uživatelmusírozhodnout, zda použít plnou nebo řídkou matici Např. podle hustoty (<0.3) hustota = nnz(a) / prod(size(a));
Řídké matice v Matlabu Některé užitečné příkazy speye(m,n) obdoba eye, sestaví řídkou jednotkovou matici spdiag(b,d,m,n) řídká diagonální matice ze sloupců matice B sprand(m, n, dens) matice s náhodnými prvky a danou hustotou sparse(a) převede plnou matici A na řídkou full(s) převede řídkou matici na plnou nnz(s) počet nenulových prvků nonzeros(s) vrátí nenulové prvky spones(s) nahradí nenulové prvky za jedničky spy(s) zobrazí strukturu řídké matice (polohu nenulových prvků)
Řídké matice v Matlabu Přímé sestavení ze souřadnicového zápisu pomocí funkce sparse a polí i, j, v [i,j,v]=find(s) vrátí pole i,j,v z existující matice