- MATLAB從基礎(chǔ)到精通
- 王薇編著
- 1735字
- 2019-01-01 12:47:29
2.7 不同數(shù)據(jù)類型之間的轉(zhuǎn)化
MATLAB中為用戶提供了豐富的數(shù)據(jù)類型,用戶可以根據(jù)實(shí)際問(wèn)題的需要?jiǎng)?chuàng)建不同數(shù)據(jù)類型的變量,同時(shí)MATLAB也提供了各種函數(shù)用于不同類型數(shù)據(jù)之間的轉(zhuǎn)換。下面將詳細(xì)介紹不同數(shù)據(jù)類型之間常有的轉(zhuǎn)化。
1.數(shù)值類型的互相轉(zhuǎn)換
數(shù)據(jù)類型的轉(zhuǎn)換與不同數(shù)值類型變量定義的格式相同,如x2=class(x1),其中x1為原數(shù)據(jù)類型的數(shù)據(jù),x2為轉(zhuǎn)換后數(shù)據(jù)類型的數(shù)據(jù),class為轉(zhuǎn)換的數(shù)據(jù)類型。可以轉(zhuǎn)換的數(shù)據(jù)類型包括所有的數(shù)值類型,有雙精度、單精度浮點(diǎn)型,16位、32位、64位無(wú)符號(hào)整型數(shù)據(jù),16位、32位、64位有符號(hào)整型數(shù)據(jù)等。
【例2.27】數(shù)值類型的互相轉(zhuǎn)換。
>> x=32; %定義數(shù)值類型數(shù)據(jù)x,默認(rèn)狀態(tài)下為雙精度浮點(diǎn)型 >> x1=single(x); %轉(zhuǎn)換雙精度浮點(diǎn)型數(shù)據(jù)為單精度浮點(diǎn)型數(shù)據(jù) >> x2=uint8(x); %轉(zhuǎn)換雙精度浮點(diǎn)型數(shù)據(jù)為無(wú)符號(hào)8位整型數(shù)據(jù) >> x3=int8(x); %轉(zhuǎn)換雙精度浮點(diǎn)型數(shù)據(jù)為有符號(hào)8位整型數(shù)據(jù) >> whos %查看各變量的數(shù)據(jù)類型 Name Size Bytes Class x 1x1 8 double array x1 1x1 4 single array x2 1x1 1 uint8 array x3 1x1 1 int8 array Grand total is 4 elements using 14 bytes
2.字符串與數(shù)值類型的互相轉(zhuǎn)換
字符串與數(shù)值類型的互相轉(zhuǎn)換包括數(shù)組與字符串的轉(zhuǎn)換,1~127的ASCII碼值轉(zhuǎn)換為字符,還有不同進(jìn)制數(shù)據(jù)之間的轉(zhuǎn)換等。
數(shù)組與字符串的轉(zhuǎn)換通過(guò)num2str()和str2num()函數(shù)實(shí)現(xiàn),具體的函數(shù)用法如下。
● str = num2str(A):把數(shù)值型數(shù)據(jù)數(shù)組A轉(zhuǎn)換為字符型數(shù)據(jù),默認(rèn)情況下轉(zhuǎn)換的數(shù)據(jù)精度為5位有效數(shù)字。
● str = num2str(A,precision):按照指定的數(shù)據(jù)精度轉(zhuǎn)換數(shù)組A到字符串類型數(shù)據(jù)str,precision為字符串中數(shù)據(jù)的有效位數(shù)。
● str = num2str(A,format):按照指定的數(shù)據(jù)格式轉(zhuǎn)換數(shù)組A到字符串類型數(shù)據(jù)str。format的書(shū)寫(xiě)格式為%m1.m2g/f/e,其中m1指定總共顯示的有效數(shù)字位數(shù),m2代表小數(shù)點(diǎn)后的有效數(shù)字位數(shù),“g”格式代表用指數(shù)或定點(diǎn)標(biāo)記,“e”格式代表用指數(shù)標(biāo)記,“f”格式代表用定點(diǎn)標(biāo)記,與函數(shù)sprinf()的輸出顯示設(shè)置相同。
● x = str2num('str'):字符串轉(zhuǎn)化為數(shù)組。
【例2.28】字符串與數(shù)值類型的互相轉(zhuǎn)換
>> a=rand(3); %生成隨機(jī)矩陣a >> s=num2str(a) %數(shù)組a轉(zhuǎn)換為字符串s s = 0.95013 0.48598 0.45647 0.23114 0.8913 0.018504 0.60684 0.7621 0.82141 >> s=num2str(a,3) %數(shù)組a轉(zhuǎn)換為字符串s,保留小數(shù)點(diǎn)后3位 s = 0.95 0.486 0.456 0.231 0.891 0.0185 0.607 0.762 0.821 >> s=num2str(a,'%3.2e') %轉(zhuǎn)換為字符串s,保留3位有效數(shù)字,小數(shù)點(diǎn)后留2位,以指數(shù)形式輸出 s = 9.50e-0014.86e-0014.56e-001 2.31e-0018.91e-0011.85e-002 6.07e-0017.62e-0018.21e-001 >> s=num2str(a,'%3.2g') %轉(zhuǎn)換為字符串s,保留3位有效數(shù)字,小數(shù)點(diǎn)后留2位,以“g”格式輸出 s = 0.950.490.46 0.230.890.019 0.610.760.82 >> s=num2str(a,'%3.2f') %轉(zhuǎn)換為字符串s,保留3位有效數(shù)字,小數(shù)點(diǎn)后留2位,以“f”格式輸出 s = 0.950.490.46 0.230.890.02 0.610.760.82
另外,int2str()函數(shù)和str2int()函數(shù)可以完成整型數(shù)據(jù)與字符串的轉(zhuǎn)換,即取整數(shù)據(jù)與字符串的轉(zhuǎn)換。mat2str()函數(shù)和str2mat()函數(shù)可以實(shí)現(xiàn)矩陣與字符串的轉(zhuǎn)換,其用法類似于num2str()函數(shù)和str2num()函數(shù),但不可以用于高維數(shù)組,可以參見(jiàn)MATLAB的幫助文檔。
ASCII碼值與字符之間的轉(zhuǎn)換通過(guò)char()函數(shù)和abs()函數(shù)來(lái)實(shí)現(xiàn)。
【例2.29】ASCII碼值與字符之間的轉(zhuǎn)換。
>> abs('A') %字符轉(zhuǎn)換為ASCII碼值 ans = 65 >> char(65) % ASCII碼值轉(zhuǎn)換為字符 ans = A >> char([65:127]) %多個(gè)ASCII碼值轉(zhuǎn)換為字符 ans = ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
MATLAB中還提供了一些函數(shù)用于不同進(jìn)制數(shù)據(jù)之間的轉(zhuǎn)換,其中涉及十進(jìn)制數(shù)與其他各進(jìn)制數(shù)字符串之間的轉(zhuǎn)換,主要涉及的函數(shù)如下。
● dec2hex(x)和hex2dec(x):用于十六進(jìn)制數(shù)和十進(jìn)制數(shù)之間的相互轉(zhuǎn)換。
● dec2bin(x)和bin2dec(x):用于二進(jìn)制數(shù)和十進(jìn)制數(shù)之間的相互轉(zhuǎn)換。
● str = dec2base(d,base)和d = base2dec('strn',base):用于任意進(jìn)制的數(shù)與十進(jìn)制數(shù)之間的轉(zhuǎn)換。
【例2.30】不同進(jìn)制數(shù)據(jù)之間的轉(zhuǎn)換。
>> s=dec2hex(59) %十進(jìn)制數(shù)59轉(zhuǎn)換為十六進(jìn)制數(shù) s = 3B >> n=hex2dec('1B') %十六進(jìn)制數(shù)“1B”轉(zhuǎn)換為十進(jìn)制數(shù) n = 27 >> s=dec2bin(19) %十進(jìn)制數(shù)19轉(zhuǎn)換為二進(jìn)制數(shù) s = 10011 >> n=bin2dec('100011') %二進(jìn)制數(shù)“100011”轉(zhuǎn)換為十進(jìn)制數(shù) n = 35 >> s=dec2base(33,8) %十進(jìn)制數(shù)33轉(zhuǎn)換為八進(jìn)制 s = 41 >> n=base2dec('222',8) %十進(jìn)制數(shù)“222”轉(zhuǎn)換為十進(jìn)制 n = 146
3.元胞數(shù)組與數(shù)值類型的互相轉(zhuǎn)換
元胞數(shù)組與數(shù)值類型的互相轉(zhuǎn)換通過(guò)num2cell()函數(shù)來(lái)實(shí)現(xiàn),具體用法如下。
● c = num2cell(A):轉(zhuǎn)換數(shù)組A到元胞數(shù)組c。
● c = num2cell(A,dims):按照指定的維數(shù)轉(zhuǎn)換數(shù)組A到元胞數(shù)組c。
【例2.31】元胞數(shù)組與數(shù)值類型的互相轉(zhuǎn)換。
>> A=magic(3) A = 8 1 6 3 5 7 4 9 2 >> num2cell(A) %轉(zhuǎn)換數(shù)組A到元胞數(shù)組 ans = [8] [1] [6] [3] [5] [7] [4] [9] [2] >> num2cell(A,[1,9]) %按指定維數(shù)轉(zhuǎn)換數(shù)組A到元胞數(shù)組 ans = [3x1 double] [3x1 double] [3x1 double]
4.字符串、元胞數(shù)組、結(jié)構(gòu)體之間的互相轉(zhuǎn)換
函數(shù)char和cellstr用于元胞數(shù)組和字符串之間的轉(zhuǎn)換;函數(shù)cell2struct和struct2cell可用于元胞數(shù)組和結(jié)構(gòu)體的轉(zhuǎn)換。下面以實(shí)例來(lái)具體演示這些函數(shù)的使用。
【例2.32】字符串、元胞數(shù)組、結(jié)構(gòu)體之間的互相轉(zhuǎn)換。
>> str2CELL=cellstr({'abc', 'def';'ABC','DEF'}) %字符串轉(zhuǎn)換為元胞數(shù)組 str2CELL = 'abc' 'def' 'ABC' 'DEF' >> class(str2CELL) ans = cell >> cell2str=char(Str2cell) %元胞數(shù)組轉(zhuǎn)換為字符串 cell2str = abc ABC def DEF >> class(cell2str) ans = char >> c2s=cell2struct(str2CELL,'A',4) %元胞數(shù)組轉(zhuǎn)換為結(jié)構(gòu)體 c2s = 2x2 struct array with fields: A >> class(c2s) ans = struct >> s2c=struct2cell(c2s) %結(jié)構(gòu)體轉(zhuǎn)換為元胞數(shù)組 s2c(:,:,1) = 'abc' 'ABC' s2c(:,:,2) = 'def' 'DEF' >> class(s2c) ans = cell
- HTML5+CSS3王者歸來(lái)
- Instant Testing with CasperJS
- 嵌入式軟件系統(tǒng)測(cè)試:基于形式化方法的自動(dòng)化測(cè)試解決方案
- Java Web基礎(chǔ)與實(shí)例教程(第2版·微課版)
- Java Web基礎(chǔ)與實(shí)例教程
- Python數(shù)據(jù)分析(第2版)
- Redis Essentials
- Mastering ROS for Robotics Programming
- PHP編程基礎(chǔ)與實(shí)例教程
- Learning Concurrency in Kotlin
- Learning PHP 7
- 3ds Max印象 電視欄目包裝動(dòng)畫(huà)與特效制作
- 并行編程方法與優(yōu)化實(shí)踐
- Mastering HTML5 Forms
- Java程序設(shè)計(jì)基礎(chǔ)(第6版)