155GIT1 / 3. cvičení: Porovnání verzí
(Není zobrazeno 27 mezilehlých verzí od 2 dalších uživatelů.) | |||
Řádek 1: | Řádek 1: | ||
{{Geoinformatika}} | {{Geoinformatika}} | ||
{{Cvičení|155GIT1|3|Textové řetězce, workspace, | {{Cvičení|155GIT1|3|Matlab - Textové řetězce, workspace, zápis matic do textových souborů}} | ||
== Náplň | == Náplň == | ||
# textové řetězce | # textové řetězce | ||
# datové typy {{bullet}} <code>class()</code> | # datové typy {{bullet}} <code>class()</code> {{bullet}} <code>num2str()</code>, <code>str2num()</code> | ||
# workspace {{bullet}} <code>whos</code> {{bullet}} <code>save</code>, <code>load</code>, <code>clear</code> | # workspace {{bullet}} <code>whos</code> {{bullet}} <code>ls</code> {{bullet}} <code>save</code>, <code>load</code>, <code>clear</code> | ||
#* manipulace se soubory viz [http://geo.fsv.cvut.cz/ | #* manipulace se soubory viz [http://geo.fsv.cvut.cz/vyuka/155git1/matlab/matlab.pdf#page=38] {{bullet}} <code>type</code> | ||
# zápis matice do textového souboru / na standardní výstup | # zápis matice do textového souboru / na standardní výstup | ||
# formátování výstupu | # formátování výstupu | ||
== Ukázky == | == Ukázky == | ||
Řádek 17: | Řádek 16: | ||
<source lang=octave> | <source lang=octave> | ||
t = ' | t = 'muj reteyec' | ||
t | length(t) | ||
t( | t(5:end) | ||
t( | index = find(t=='y') | ||
t(index) = 'z' | |||
t(end+1:end+2) = ' :' | |||
t = ['toto je ',t] | |||
sat = {'GPS','GLONASS','GALILEO'} % pole buněk (uložení řetězců různých délek do jedné proměnné) | |||
% buňky mohou obsahovat jak numerické, tak textové proměnné | |||
sat{1} | |||
sat{1}(2) | |||
length(sat) | |||
length(sat{3}) | |||
</source> | </source> | ||
Řádek 26: | Řádek 35: | ||
<source lang=octave> | <source lang=octave> | ||
whos | |||
class(t) | class(t) | ||
class(sat) | |||
A = [1 2; 3 4] | A = [1 2; 3 4] | ||
class(A) | class(A) | ||
class(1) | class(1) | ||
class(2.3) | class(2.3) | ||
class('1') | |||
</source> | |||
''(konverze mezi datovými typy)'' | |||
<source lang=octave> | |||
disp( ['vysledek je ',num2str(A(1))] ) | |||
p1 = 1 | |||
p2 = '1' | |||
p1 + p2 | |||
p1 + str2num(p2) | |||
</source> | |||
=== Export/import proměnných === | |||
<source lang=octave> | |||
save mojedata sat | |||
clear sat | |||
sat | |||
load mojedata | |||
sat | |||
</source> | </source> | ||
Řádek 37: | Řádek 70: | ||
''(zápis do souboru)'' | ''(zápis do souboru)'' | ||
* funkce [http://geo.fsv.cvut.cz/ | * funkce [http://geo.fsv.cvut.cz/vyuka/155git1/matlab/matlab.pdf#page=41 fopen()] a její atributy | ||
<source lang=octave> | <source lang=octave> | ||
A = | A = [1 2 3 4; 5 6 7 8; 9 10 11 12] | ||
fid = fopen('a.txt','w'); | fid = fopen('a.txt','w'); | ||
fprintf(fid,'%f %f %f %f\n',A); | fprintf(fid,'%f %f %f %f\n',A); | ||
fclose(fid); % zápis je proveden až při uzavření souboru | fclose(fid); % zápis je proveden až při uzavření souboru | ||
type a.txt | type a.txt | ||
5. | 1.000000 5.000000 9.000000 2.000000 % ve výpisu matice je nesprávné pořadí prvků !!! | ||
6.000000 10.000000 3.000000 7.000000 | |||
11.000000 4.000000 8.000000 12.000000 | |||
% správný výpis matice (správný rozměr a pořadí prvků) | % správný výpis matice (správný rozměr a pořadí prvků) | ||
fid = fopen(' | fid = fopen('a.txt','w'); | ||
fprintf(fid,'%f %f %f %f\n',A'); | fprintf(fid,'%f %f %f %f\n',A'); | ||
fclose(fid); | fclose(fid); | ||
type | type a.txt | ||
1.000000 2.000000 3.000000 4.000000 | |||
5.000000 6.000000 7.000000 8.000000 | |||
9.000000 10.000000 11.000000 12.000000 | |||
5. | |||
% změna formátování | % změna formátování | ||
fid = fopen(' | fid = fopen('a.txt','w'); | ||
fprintf(fid,'%.1f %.1f %.1f %.1f\n',A'); | fprintf(fid,'%5.1f %4.1f %4.1f %4.1f\n',A'); | ||
fclose(fid); | fclose(fid); | ||
type | type a.txt | ||
1.0 2.0 3.0 4.0 | |||
5.0 6.0 7.0 8.0 | |||
9.0 10.0 11.0 12.0 | |||
% zápis dat do již existujícího souboru | % zápis dat do již existujícího souboru | ||
fid = fopen(' | fid = fopen('a.txt','a'); | ||
fprintf(fid,'%f %f %f %f\n',A(1,:)); % totožné s fprintf(fid,'%f %f %f %f\n',A(1,:)');, neboť se vypisuje vektor | fprintf(fid,'%f %f %f %f\n',A(1,:)); % totožné s fprintf(fid,'%f %f %f %f\n',A(1,:)');, neboť se vypisuje vektor | ||
fclose(fid); | fclose(fid); | ||
type | type a.txt | ||
1.0 2.0 3.0 4.0 | |||
5.0 6.0 7.0 8.0 | |||
9.0 10.0 11.0 12.0 | |||
1.000000 2.000000 3.000000 4.000000 | |||
</source> | </source> | ||
Řádek 92: | Řádek 115: | ||
<source lang=octave> | <source lang=octave> | ||
n = 8:10; alfa = [45.246 -349.154 1.750]; | n = 8:10; alfa = [45.246 -349.154 1.750]; | ||
fprintf('pro bod % | fprintf('pro bod %2i je uhel = %7.2f°\n',[n; alfa]); | ||
</source> | |||
''(neformátovaný zápis numerických hodnot / řetězce na standardní výstup)'' | |||
<source lang=octave> | |||
disp(alfa) | |||
disp('text') | |||
</source> | </source> | ||
=== Formátování dat obecně === | === Formátování dat obecně === | ||
* viz [http://geo.fsv.cvut.cz/ | * viz [http://geo.fsv.cvut.cz/vyuka/155git1/matlab/matlab.pdf#page=44 formátovací položky] | ||
<source lang=octave> | <source lang=octave> | ||
Řádek 134: | Řádek 164: | ||
a: 9 -> a^2: 81 | a: 9 -> a^2: 81 | ||
a: 10 -> a^2: 100 | a: 10 -> a^2: 100 | ||
</source> | </source> | ||
== Úlohy == | == Úlohy == | ||
* | * [[155GIT1 / 3. cvičení / Příklady|3. cvičení - příklady]] | ||
<!-- --> | |||
Aktuální verze z 8. 3. 2023, 03:25
Matlab - Textové řetězce, workspace, zápis matic do textových souborů
Náplň
- textové řetězce
- datové typy •
class()
•num2str()
,str2num()
- workspace •
whos
•ls
•save
,load
,clear
- manipulace se soubory viz [1] •
type
- manipulace se soubory viz [1] •
- zápis matice do textového souboru / na standardní výstup
- formátování výstupu
Ukázky
Řetězce
t = 'muj reteyec'
length(t)
t(5:end)
index = find(t=='y')
t(index) = 'z'
t(end+1:end+2) = ' :'
t = ['toto je ',t]
sat = {'GPS','GLONASS','GALILEO'} % pole buněk (uložení řetězců různých délek do jedné proměnné)
% buňky mohou obsahovat jak numerické, tak textové proměnné
sat{1}
sat{1}(2)
length(sat)
length(sat{3})
Datové typy
whos
class(t)
class(sat)
A = [1 2; 3 4]
class(A)
class(1)
class(2.3)
class('1')
(konverze mezi datovými typy)
disp( ['vysledek je ',num2str(A(1))] )
p1 = 1
p2 = '1'
p1 + p2
p1 + str2num(p2)
Export/import proměnných
save mojedata sat
clear sat
sat
load mojedata
sat
Formátovaný zápis matice
(zápis do souboru)
- funkce fopen() a její atributy
A = [1 2 3 4; 5 6 7 8; 9 10 11 12]
fid = fopen('a.txt','w');
fprintf(fid,'%f %f %f %f\n',A);
fclose(fid); % zápis je proveden až při uzavření souboru
type a.txt
1.000000 5.000000 9.000000 2.000000 % ve výpisu matice je nesprávné pořadí prvků !!!
6.000000 10.000000 3.000000 7.000000
11.000000 4.000000 8.000000 12.000000
% správný výpis matice (správný rozměr a pořadí prvků)
fid = fopen('a.txt','w');
fprintf(fid,'%f %f %f %f\n',A');
fclose(fid);
type a.txt
1.000000 2.000000 3.000000 4.000000
5.000000 6.000000 7.000000 8.000000
9.000000 10.000000 11.000000 12.000000
% změna formátování
fid = fopen('a.txt','w');
fprintf(fid,'%5.1f %4.1f %4.1f %4.1f\n',A');
fclose(fid);
type a.txt
1.0 2.0 3.0 4.0
5.0 6.0 7.0 8.0
9.0 10.0 11.0 12.0
% zápis dat do již existujícího souboru
fid = fopen('a.txt','a');
fprintf(fid,'%f %f %f %f\n',A(1,:)); % totožné s fprintf(fid,'%f %f %f %f\n',A(1,:)');, neboť se vypisuje vektor
fclose(fid);
type a.txt
1.0 2.0 3.0 4.0
5.0 6.0 7.0 8.0
9.0 10.0 11.0 12.0
1.000000 2.000000 3.000000 4.000000
(zápis na standardní výstup - příkazové okno)
n = 8:10; alfa = [45.246 -349.154 1.750];
fprintf('pro bod %2i je uhel = %7.2f°\n',[n; alfa]);
(neformátovaný zápis numerických hodnot / řetězce na standardní výstup)
disp(alfa)
disp('text')
Formátování dat obecně
tt = 'moje nahodne cislo'; n = 100;
fprintf('%s (1 az %i): %i\n',tt,n,randi(n));
moje nahodne cislo (1 az 100): 31
% uložení do řetězce
r = sprintf('%s (1 az %i): %i\n',tt,n,randi(n))
class(r)
ans = char
% příklad formátování dvou řádkových vektorů
a = 1:10
fprintf('a: %.2d -> a^2: %.3d\n', [a; a.^2]);
a: 01 -> a^2: 001
a: 02 -> a^2: 004
a: 03 -> a^2: 009
a: 04 -> a^2: 016
a: 05 -> a^2: 025
a: 06 -> a^2: 036
a: 07 -> a^2: 049
a: 08 -> a^2: 064
a: 09 -> a^2: 081
a: 10 -> a^2: 100
fprintf('a: %2d -> a^2: %3d\n', [a; a.^2]);
a: 1 -> a^2: 1
a: 2 -> a^2: 4
a: 3 -> a^2: 9
a: 4 -> a^2: 16
a: 5 -> a^2: 25
a: 6 -> a^2: 36
a: 7 -> a^2: 49
a: 8 -> a^2: 64
a: 9 -> a^2: 81
a: 10 -> a^2: 100