国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程)

這篇具有很好參考價值的文章主要介紹了第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

?講解視頻:可以在bilibili搜索《MATLAB教程新手入門篇——數(shù)學(xué)建模清風(fēng)主講》。?

MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講,適合零基礎(chǔ)同學(xué)觀看)_嗶哩嗶哩_bilibili

5.3.2 字符向量元胞數(shù)組

在上一節(jié)中,我們詳細(xì)介紹了一般的元胞數(shù)組的使用方法。本節(jié)將重點(diǎn)學(xué)習(xí)字符向量元胞數(shù)組,這是一種特殊的元胞數(shù)組,元胞中的每個數(shù)據(jù)都是字符向量類型。

在 MATLAB 2016b 版本以前,字符向量元胞數(shù)組是處理和分析文本數(shù)據(jù)的核心工具。但是,自 MATLAB 2017a 版本起,官方推薦使用更為高效的字符串類型來處理文本。這種新的字符串類型采用英文雙引號(")進(jìn)行標(biāo)識,單個這類文本被稱為字符串標(biāo)量。將多個字符串標(biāo)量放到同一個數(shù)組中,便構(gòu)成了一個字符串?dāng)?shù)組。關(guān)于這一點(diǎn),我們將在下一小節(jié)中進(jìn)行更深入的探討。即便引入了這種新的文本類型,本節(jié)介紹的文本處理方法依然至關(guān)重要,它們不僅助力于理解即將介紹的字符串類型,而且許多文本處理函數(shù)能同時適用于字符向量元胞數(shù)組和字符串類型。以下是本節(jié)將要學(xué)習(xí)的一些基礎(chǔ)文本處理函數(shù),這些函數(shù)自 MATLAB 2016b 版本以前就已經(jīng)存在:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

1cellstr函數(shù):將其他類型的文本轉(zhuǎn)換為字符向量元胞數(shù)組

cellstr 函數(shù)可以將其他類型的文本數(shù)據(jù)轉(zhuǎn)換為字符向量元胞數(shù)組,它的基本用法非常簡單:C = cellstr(A),這里的A通常是字符數(shù)組,也可以是我們下一節(jié)要學(xué)的字符串?dāng)?shù)組,C就是轉(zhuǎn)換后得到的字符向量元胞數(shù)組。下面我們來看幾個例子:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

從上面的例子可以看出,如果輸入的數(shù)據(jù)類型是字符數(shù)組(包括字符向量和字符矩陣),cellstr函數(shù)在轉(zhuǎn)換過程中會自動刪除每行尾部的空白字符。這相當(dāng)于對轉(zhuǎn)換后的每個元胞中的數(shù)據(jù)應(yīng)用了 deblank 函數(shù)。然而,如果轉(zhuǎn)換的對象是字符串?dāng)?shù)組(將在下一節(jié)學(xué)習(xí)),則不會刪除尾部的空白字符。

下面我們來看一道例題:請將字符向量'1'、 '2'一直到'100'保存到元胞數(shù)組C中。

這個題目有多種實(shí)現(xiàn)的思路,最容易想到的就是使用for循環(huán),我們可以使用num2str函數(shù)將數(shù)字1至100轉(zhuǎn)換為字符向量,然后依次儲存到元胞數(shù)組C中。

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

現(xiàn)在考考大家,如果不用循環(huán)語句大家可以解決這個問題嗎?

在之前的小節(jié)中,我們介紹過 num2str 函數(shù),當(dāng)輸入變量分別是行向量和列向量時:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

我們重點(diǎn)來看列向量的轉(zhuǎn)換結(jié)果,轉(zhuǎn)換后的結(jié)果是一個字符矩陣,每一行的字符向量由原來的數(shù)字轉(zhuǎn)換而成,因此借助這個思路我們可以給出相應(yīng)的代碼:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

然而,轉(zhuǎn)換后的數(shù)字前面有num2str函數(shù)自動填充的空格,由于cellstr函數(shù)不會自動刪除前面的空白字符,因此我們需要手動處理。這里我們可以使用strip函數(shù)或者strtrim函數(shù)刪除C中各字符向量開頭的空格:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

當(dāng)然,這個例題僅僅是為了幫助大家復(fù)習(xí)相關(guān)的知識點(diǎn),如果大家學(xué)習(xí)了下一節(jié)要介紹的字符串?dāng)?shù)組,只需要一行代碼就能解決:C = cellstr(string(1:100))。

拓展:和cellfun函數(shù)類似,MATLAB中還有 arrayfun 函數(shù),它可以對數(shù)組中的每個元素應(yīng)用給定的函數(shù)。這個函數(shù)我們會在后續(xù)的章節(jié)進(jìn)行講解。使用arrayfun函數(shù)也只需要一行代碼就能解決:C = arrayfun(@num2str, 1:100, 'UniformOutput', false) 。

2isletter、isspaceisstrprop函數(shù):識別特定種類的字符

在MATLAB中,isletter、isspace 和 isstrprop 函數(shù)用于識別文本中特定種類的字符。這三個函數(shù)在文本處理中非常有用,尤其是在字符數(shù)據(jù)的預(yù)處理和分析階段,其中isstrprop 函數(shù)是前兩個函數(shù)的進(jìn)階版。

isletter 函數(shù)用于判斷字符是否為字母,它的使用方法非常簡單:TF = isletter(A),輸入?yún)?shù)A通常是字符數(shù)組或字符串標(biāo)量(如果A是其他數(shù)據(jù)類型,那么isletter函數(shù)會返回全為0的邏輯數(shù)組或者直接報錯);返回值TF是一個邏輯數(shù)組,當(dāng) A 中的某個字符是字母時,TF中對應(yīng)位置的元素是邏輯值1,否則是邏輯值0。(注意:isletter函數(shù)不僅會識別英文字母,還會識別其他語言中的文字,例如中文的漢字也會被識別為邏輯值1)

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

如果你想處理字符向量元胞數(shù)組,你可以借助 cellfun 函數(shù),給定isletter函數(shù)句柄并指定'UniformOutput'參數(shù)為false(isletter函數(shù)的返回值不是標(biāo)量):

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

isspace函數(shù)和isletter 函數(shù)的使用方法類似,它用于判斷字符是否為空白字符,如空格、制表符、換行符。

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

下面我們來看一個思考題:能否找出所有被isspace函數(shù)識別為空白字符對應(yīng)的Unicode編碼?

在Unicode字符集中,十進(jìn)制0 2^16-1 (十六進(jìn)制0000-FFFF)涵蓋了絕大多數(shù)常用字符,包括各種語言的文字、符號、以及特殊字符,因此我們識別的字符范圍可以限定在這個區(qū)間內(nèi)。下面我們給出代碼:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

上面代碼中的ind是一個邏輯數(shù)組,all_unicode(ind)就是使用ind對變量all_unicode進(jìn)行邏輯索引,得到這些空白字符對應(yīng)的Unicode編碼。限于篇幅,右側(cè)的結(jié)果沒有顯示完整,完整的結(jié)果中有25個編碼,感興趣的同學(xué)可以查看本章附錄2:MATLAB中的空白字符。

isstrprop函數(shù)是前兩個函數(shù)的進(jìn)階版本,它不僅能夠識別字母和空白字符,還能識別更廣泛的文本形式,如數(shù)字、標(biāo)點(diǎn)符號、控制字符等。此外,isstrprop函數(shù)具備處理多種類型的文本數(shù)據(jù)的能力,包括字符數(shù)組、字符串標(biāo)量、數(shù)值數(shù)組(其中的元素代表 Unicode 編碼)、字符向量元胞數(shù)組,以及字符串?dāng)?shù)組。(prop來自單詞property,可翻譯為屬性)

isstrprop 函數(shù)的基本用法是 TF = isstrprop(str, category)。其中,第一個輸入?yún)?shù)str 表示文本數(shù)據(jù), 第二個輸入?yún)?shù)category 是你想要檢測的字符類別。它支持多種字符類別,例如 'alpha'(字母)、'digit'(數(shù)字)等。以下它是支持的字符類別的列表(來自MATLAB官網(wǎng)):

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

根據(jù)輸入文本數(shù)據(jù) str 的數(shù)據(jù)類型,isstrprop 函數(shù)返回不同類型的結(jié)果:

  1. 如果str是字符數(shù)組、字符串標(biāo)量或數(shù)值數(shù)組,則TF為邏輯數(shù)組類型;
  2. 如果str是字符向量元胞數(shù)組或字符串?dāng)?shù)組,則TF為元胞數(shù)組類型。

此外,我們還可以在輸入?yún)?shù)的最后加上'ForceCellOutput', true,這樣可以強(qiáng)制返回值TF為一個元胞數(shù)組,即使 str 是一個字符數(shù)組、字符串標(biāo)量或數(shù)值數(shù)組也是如此。

我們來看例子:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

下面再來看一個實(shí)際的例子。假設(shè)字符向量元胞數(shù)組c2中保存著客戶的信息,包括客戶的姓名、手機(jī)號和所在城市,我們的目標(biāo)就是提取客戶的手機(jī)號。如果每位客戶的手機(jī)號在字符向量中的位置都是固定的,例如都是1至11位,那么就可以借助字符向量的索引來提取手機(jī)號,但下面給的例子顯然不滿足這樣的規(guī)則,此時我們可以借助isstrprop函數(shù):

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

isstrprop函數(shù)返回了一個邏輯向量構(gòu)成的元胞數(shù)組TF,邏輯向量中為1的位置就是手機(jī)號所在的位置。接下來,我們可以通過循環(huán)遍歷 c2,并使用TF中的邏輯索引提取手機(jī)號碼:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

通過 isstrprop 函數(shù),我們可以有效地處理和分析含有混合類型文本的數(shù)據(jù),特別是在提取特定格式的信息(如電話號碼)時。它的靈活性和強(qiáng)大的識別能力使其成為MATLAB文本分析的有力工具。

拓展:能否不使用循環(huán)語句直接提取元胞數(shù)組中每一個字符向量對應(yīng)的電話號碼信息?

下面我們給出兩種解決方案(這兩種方法涉及到后面章節(jié)的內(nèi)容,這里僅作演示):

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言第一種方法利用了 cellfun 函數(shù)和匿名函數(shù)。我們首先定義了一個匿名函數(shù) f,該函數(shù)通過 isstrprop 函數(shù)識別并提取字符向量中的數(shù)字。然后,我們利用 cellfun 函數(shù),將這個匿名函數(shù)應(yīng)用于元胞數(shù)組 c2 中的每個字符向量,以便提取電話號碼。在本書后續(xù)關(guān)于自定義函數(shù)的章節(jié)中,我們將對匿名函數(shù)的使用方法進(jìn)行詳細(xì)的介紹。

第二種方法借助了 MATLAB 強(qiáng)大的正則表達(dá)式處理能力。我們首先定義一個匹配11位數(shù)字的電話號碼模式,然后使用 regexp 函數(shù)來從每個字符向量中提取符合該模式的文本。在下一章中,我們將詳細(xì)探討正則表達(dá)式的使用技巧。

3strfind函數(shù)和strrep函數(shù):查找與替換文本

在處理文本數(shù)據(jù)時,我們經(jīng)常需要查找指定的文本,并在必要時進(jìn)行替換。事實(shí)上這一需求在文本處理中非常常見,下圖是記事本和Word軟件的查找替換界面:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

在MATLAB中,對文本數(shù)據(jù)進(jìn)行查找和替換可以通過 strfind 和 strrep 函數(shù)實(shí)現(xiàn)(rep來自單詞replace,單詞find和replace翻譯成中文分別是查找和替換),下面我們直接引用MATLAB官網(wǎng)的幫助文檔來介紹它們的用法。

先來看strfind函數(shù)的幫助文檔:

k = strfind(str,pat) 在 str 中搜索出現(xiàn)的 pat。輸出 k 指示 str 中每次出現(xiàn)的 pat 的起始索引。如果未找到 pat,則 strfind 返回一個空數(shù)組 []。strfind 函數(shù)執(zhí)行區(qū)分大小寫的搜索。

str:輸入文本,指定為字符串?dāng)?shù)組、字符向量或字符向量元胞數(shù)組。

pat:搜索模式,指定為下列值之一:字符串標(biāo)量、字符向量和pattern標(biāo)量。

如果 str 是字符向量或字符串標(biāo)量,則 strfind 返回 double 類型的向量。

如果 str 是字符向量元胞數(shù)組或字符串?dāng)?shù)組,則 strfind 返回 double 類型的向量元胞數(shù)組(即元胞數(shù)組中的數(shù)據(jù)為double類型的向量)。

當(dāng) cellOutput 參數(shù)設(shè)置為 true 時,即使 str 是字符向量, ?k = strfind(str,pat,'ForceCellOutput',cellOutput) 也會強(qiáng)制 strfind 以元胞數(shù)組形式返回 k。

讓我們通過幾個實(shí)例來具體了解 strfind 函數(shù)的用法:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

以上示例清晰展示了 strfind 函數(shù)在各類文本數(shù)據(jù)中查找指定文本的能力,同時也突出了它對大小寫敏感的特性。

另外,在上方介紹搜索模式pat時,提到了一個新概念:“pattern標(biāo)量”。MATLAB從 2020b 版本開始,引入了 pattern 類型作為一種新的搜索模式。pattern 類型專門用于搜索和匹配文本,它提供了一些高級的匹配功能,大家可以在MATLAB官網(wǎng)搜索關(guān)鍵詞:pattern

pattern可翻譯為模式,以下是MATLAB官方文檔中對它的介紹:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

為了更好地理解 pattern 類型的應(yīng)用,讓我們看兩個例子。假設(shè)我們想在文本中匹配數(shù)字,可以這樣編寫代碼(請確保您的MATLAB版本不低于2020b,否則會報錯):

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

盡管 pattern 類型是一個非常有用的功能,但在本教程中,我們不打算深入探討它,主要基于以下三點(diǎn)考慮:首先,pattern 類型對MATLAB版本有較高要求,僅在2020b及以上版本中可用,低版本中使用會導(dǎo)致錯誤。其次,pattern 類型涉及多個新函數(shù),這些函數(shù)名稱較長,對非英語母語的讀者可能不夠友好,且不易記憶。最后,我們在下一章要學(xué)習(xí)的正則表達(dá)式功能可以完全替代 pattern 類型的功能。正則表達(dá)式是一種廣泛使用且功能強(qiáng)大的文本處理工具,在多種編程語言中都有應(yīng)用,且各語言間的語法高度相似。

因此,為了保持教程的實(shí)用性和通用性,我們將重點(diǎn)放在下一章要介紹的正則表達(dá)式上,這是一種更廣泛認(rèn)可和使用的文本處理方法。

接下來,讓我們了解一下 strrep 函數(shù)的用法。strrep 函數(shù)用于將舊文本替換成新的文本。

newStr = strrep(str,old,new) 將 str 中出現(xiàn)的所有 old 都替換為 new。

str:輸入文本,指定為字符串?dāng)?shù)組、字符向量或字符向量元胞數(shù)組。

old:要替換的子字符串(注意:這里所說的“字符串”可以理解為文本,并不僅限于字符串這種數(shù)據(jù)類型),指定為字符串?dāng)?shù)組、字符向量或字符向量元胞數(shù)組。

new:新的子字符串(子文本),指定為字符串?dāng)?shù)組、字符向量或字符向量元胞數(shù)組。

如果任何輸入?yún)?shù)是非標(biāo)量字符串?dāng)?shù)組或字符向量元胞數(shù)組,則其他輸入?yún)?shù)的大小必須兼容。

下面我們來看例子:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

在最基本的用法中,strrep 函數(shù)用于替換指定的子文本。例如,我們將c1中的'喜歡'替換為了'不喜歡'。此外, strrep 函數(shù)在替換時是區(qū)分英文字母的大小寫的,例如我們將c2中的'matlab'替換為了'MATLAB'。

strrep 函數(shù)還可以接受元胞數(shù)組作為輸入,這允許用戶在單個函數(shù)調(diào)用中執(zhí)行多種不同的替換操作,返回的結(jié)果也是元胞數(shù)組形式。

此外,strrep 函數(shù)在處理重疊文本時的特性值得關(guān)注。當(dāng)要替換的文本相互重疊時,strrep 函數(shù)的處理方式會有特定的表現(xiàn)。下面我們用 strrep 來處理一個包含重疊文本的例子:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

大家觀察MATLAB的返回結(jié)果,結(jié)果中出現(xiàn)了三次*,這是因?yàn)閟trrep函數(shù)認(rèn)為'abababab'中出現(xiàn)了三次'aba',即允許重疊子文本。下圖給出了兩種不同的替換方式,strrep函數(shù)使用的就是左側(cè)的方式。

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

如果你希望使用右側(cè)的方法進(jìn)行替換,那么你可以使用MATLAB在2016b版本中推出的replace函數(shù),它在替換時不允許重疊子文本:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

另外,replace函數(shù)和strrep函數(shù)用法非常相似,newStr = replace(str,old,new) 將所有出現(xiàn)的子文本 old 替換為 new。如果 old 包含多個子文本,則 new 必須與 old 具有相同的大小,或者必須為單個子文本。注意:如果oldnew不是標(biāo)量(即不是單個文本,而是包含多個文本的字符向量元胞數(shù)組或者字符串?dāng)?shù)組),replace函數(shù)和strrep函數(shù)返回的結(jié)果有很大差異

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

大家可以對比 strrep 函數(shù)的返回結(jié)果,當(dāng)輸入?yún)?shù)old 或 new 中的文本不是標(biāo)量時,strrep 函數(shù)會依次將 old 和 new 中的文本進(jìn)行匹配,并分別進(jìn)行替換。因此,如果輸入的 old 或 new 是元胞數(shù)組或字符串?dāng)?shù)組,strrep 函數(shù)會返回一個相應(yīng)大小的元胞數(shù)組或字符串?dāng)?shù)組,其中包含了每次替換的結(jié)果。相比之下,replace 函數(shù)在處理非標(biāo)量文本時,它的返回值是一個標(biāo)量,即相當(dāng)于在該文本中進(jìn)行了多輪替換。

此外,replace函數(shù)的old參數(shù)還支持pattern 數(shù)組,前文介紹過,pattern 類型專門用于搜索和匹配文本,我們教程不會具體講解,下一章中將使用正則表達(dá)式代替它。

4strjoin函數(shù):對數(shù)組中的文本進(jìn)行連接

有時候我們希望對字符向量元胞數(shù)組或者字符串?dāng)?shù)組中的文本進(jìn)行連接,例如使用空格連接不同的單詞、使用換行符連接各段文字等。strjoin函數(shù)可以幫助我們完成這個任務(wù),下面來看它的基本用法:

str = strjoin(C) 使用空格將 C 的元素與相鄰的元素之間連接起來,構(gòu)造 str。C 可以是字符向量元胞數(shù)組或字符串?dāng)?shù)組。

str = strjoin(C,delimiter) 使用delimiter將 C 的元素與相鄰的元素之間連接起來,構(gòu)造 str。delimiter是分隔字符,它通常是字符向量類型。如果它是字符向量元胞數(shù)組或字符串?dāng)?shù)組,則它包含的元素數(shù)必須比 C 中包含的元素數(shù)少一個,此時strjoin 通過交錯插入 delimiter 和 C 的元素來形成 str。

它的使用方法非常簡單,我們直接來看例子:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

注意,在使用 strjoin 函數(shù)時,分隔符可能包括一些在文本中不易直接表示的特殊字符,比如上述示例中的換行符。在MATLAB中,為了便于使用換行符,提供了專用的 newline 函數(shù)。此外,換行符的ASCII編碼是10,因此我們還可以通過 char(10) 來表示換行符。

對于其他一些不方便使用文本表示的字符,你也可以使用對應(yīng)的ASCII編碼來表示。下面我們將介紹另一種表示特殊字符的方法:使用轉(zhuǎn)義字符。

什么是轉(zhuǎn)義字符?轉(zhuǎn)義字符在許多編程語言中都存在,它是一類特殊的字符,用于在文本中表示特定的字符,以下是MATLAB中常用的轉(zhuǎn)義字符:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

(注:上表中常用的轉(zhuǎn)義字符為\t和\n,另外\\表示的是反斜杠\本身,類似于字符向量中兩個連續(xù)的單引號''表示的是單引號'本身。)

strjoin函數(shù)的分隔字符中可以包括上表列舉的轉(zhuǎn)義字符,這樣可以更方便的對文本進(jìn)行連接。

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

此外,MATLAB中的轉(zhuǎn)義字符單獨(dú)使用沒有含義,它們通常需要結(jié)合文本處理相關(guān)的內(nèi)置函數(shù)一起使用。

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

通過上述示例,我們可以看到 strjoin 函數(shù)如何有效地將數(shù)組中的文本元素連接起來,不論是使用默認(rèn)的空格還是選用自定義的分隔符。這一特性使得 strjoin 函數(shù)特別適用于整合零散的文本數(shù)據(jù),進(jìn)而方便后續(xù)的處理和展示。

5strsplit函數(shù):在指定分隔符處拆分文本

當(dāng)我們需要將一個長文本拆分成多個更短的文本時,就需要用到strsplit函數(shù)。它的功能非常強(qiáng)大,以下是MATLAB官網(wǎng)給出的它的基本用法:

C = strsplit(str)在空白處將str拆分為C,str指定為字符向量或字符串標(biāo)量。

返回值C是字符向量元胞數(shù)組??瞻鬃址刃в诩蟵' ','\f','\n','\r','\t','\v'} 中的任何轉(zhuǎn)義序列。如果 str 具有連續(xù)的空白字符,則 strsplit 將它們視為一個空格。

C = strsplit(str, delimiter)在 delimiter 指定的分隔符處拆分 str。

如果str具有連續(xù)的分隔符,并且它們之間沒有其他字符,則strsplit將它們視為一個分隔符。例如,strsplit('Hello.world','.') 和 strsplit('Hello...world','.') 返回相同的輸出。

delimiter:分隔字符,指定為字符向量、1×n的字符向量元胞數(shù)組或 1×n的字符串?dāng)?shù)組。在 delimiter 中指定的文本不會顯示在輸出 C 中。

在元胞數(shù)組或字符串?dāng)?shù)組中可以指定多個分隔符。strsplit函數(shù)根據(jù)delimiter的元素拆分 str。分隔符在 delimiter 中顯示的順序無關(guān)緊要,除非有多個分隔符都從str中的同一字符處開始匹配。在此種情況下,strsplit 將在delimiter中的第一個匹配分隔符處進(jìn)行拆分。

通過上面的介紹可以看出,strsplit函數(shù)和strjoin函數(shù)的功能剛好相反,我們來看例子:

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

除此之外,MATLAB 允許通過名稱-值參數(shù)來調(diào)整 strsplit函數(shù)的行為。

什么是名稱-值參數(shù)?

名稱-值參數(shù)是一種在 MATLAB 內(nèi)置函數(shù)中常見的可選參數(shù)形式,它提供了一種直觀的方式來配置附加選項(xiàng)。這類參數(shù)一般成對出現(xiàn),其中一個參數(shù)作為固定文本,定義了要設(shè)置或修改的選項(xiàng),另一個參數(shù)則是該選項(xiàng)的具體值。名稱-值參數(shù)必須位于其他參數(shù)之后,且它們的出現(xiàn)順序并不影響函數(shù)的執(zhí)行結(jié)果。

例如,在我們之前學(xué)習(xí)的 cellfun 函數(shù)中,'UniformOutput'是參數(shù)的名稱,而true或false是它的值,用于指定函數(shù)返回結(jié)果的格式。同樣的,在isstrprop函數(shù)中,'ForceCellOutput'是參數(shù)的名稱,其值為true或false,用于控制函數(shù)返回元胞數(shù)組形式的結(jié)果。(后續(xù)章節(jié)要學(xué)的plot函數(shù)的名稱-值參數(shù)非常多,大家可以提前查看它的幫助文檔)

另外,從MATLAB2021a版本開始,可以將名稱-值參數(shù)使用下面的形式表示:

Name1 = Value1, ..., NameN = ValueN,其中 Name 是參數(shù)名稱,Value 是對應(yīng)的值。

注意:為了保持代碼的向下兼容性,即確保代碼能在早期版本的MATLAB中正常運(yùn)行,建議大家采用傳統(tǒng)的表示方式:'Name1', Value1, ..., 'NameN', ValueN。另外,請將名稱指定為單引號的字符向量形式,使用雙引號形式的字符串可能會在低版本MATLAB中報錯。

strsplit函數(shù)支持下面兩對名稱-值參數(shù):

(1)CollapseDelimiters 多分隔符處理,指定為true (默認(rèn)值)或者 false

多分隔符處理,指定為由 'CollapseDelimiters' 和 true/false 組成的名稱-值參數(shù)。如果為 true,則 str 中的連續(xù)分隔符將作為同一個分隔符處理。如果為 false,則連續(xù)分隔符將作為單獨(dú)的分隔符處理,這會導(dǎo)致匹配的分隔符之間出現(xiàn)空字符向量 '' (0×0 char)元素。

第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程),MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講),matlab,數(shù)學(xué)建模,開發(fā)語言

(2)DelimiterType 分隔符類型,指定為 'Simple' (默認(rèn))或者 'RegularExpression'

分隔符類型這對參數(shù)的名稱為 'DelimiterType',它的值指定為下面兩個字符向量之一:

  • 'Simple': strsplit 函數(shù)將 delimiter 當(dāng)作普通文本處理;
  • 'RegularExpression': strsplit 函數(shù)將 delimiter 作為正則表達(dá)式處理。

注意,這里再次提到了正則表達(dá)式,相關(guān)內(nèi)容我們會在下一章中介紹。借助正則表達(dá)式,可以大大拓展strsplit函數(shù)的應(yīng)用場景。

對本小節(jié)的總結(jié)

在本節(jié)中,我們深入探討了MATLAB中與文本處理相關(guān)的基礎(chǔ)函數(shù)。這些函數(shù)為處理和分析各種文本數(shù)據(jù)提供了必要的工具,無論是簡單的文本操作還是復(fù)雜的文本分析,它們都能勝任。

首先,我們介紹了 cellstr函數(shù),它能將不同類型的文本數(shù)據(jù)轉(zhuǎn)換成字符向量元胞數(shù)組,為后續(xù)的文本處理打下基礎(chǔ)。

隨后,我們探討了 isletter isspace函數(shù),這兩個函數(shù)用于識別字母和空白字符,是文本分析中常用的工具。isstrprop函數(shù)作為它們的進(jìn)階版本,能夠識別更多種類的字符,其靈活性和強(qiáng)大的識別能力使其成為MATLAB文本分析中的重要工具。

我們還學(xué)習(xí)了 strfind函數(shù),它用于在文本中查找子文本并返回相應(yīng)的索引,這對于定位特定信息非常重要。

緊接著,strrep函數(shù) replace函數(shù)則用于將文本中的舊文本替換為新文本,這對于編輯和更新文本數(shù)據(jù)非常有用。

在連接文本方面,strjoin函數(shù)可以將數(shù)組中的文本元素用特定的分隔符連接起來,為構(gòu)建更加整潔和一致的文本提供了便利。

最后,我們討論了 strsplit函數(shù),它能夠根據(jù)指定的分隔符將長文本拆分為更短的文本,這在處理大量文本數(shù)據(jù)時特別有用。

這些函數(shù)為我們處理各種文本格式提供了極大的靈活性。通過各種實(shí)例,我們看到了這些函數(shù)在實(shí)際應(yīng)用中的強(qiáng)大功能。

在接下來的小節(jié)中,我們將重點(diǎn)介紹這些函數(shù)在綜合應(yīng)用中的實(shí)際案例,展示如何將這些獨(dú)立的函數(shù)組合起來,解決更為復(fù)雜和實(shí)際的文本處理任務(wù)。這些綜合應(yīng)用案例不僅將鞏固我們對于各個函數(shù)的理解,還將展示 MATLAB 在文本處理方面的卓越能力。


??點(diǎn)擊下方的CSDN專欄閱讀下一篇文章:

MATLAB入門課程專欄文章來源地址http://www.zghlxwxcb.cn/news/detail-777994.html

到了這里,關(guān)于第5章:5.3.2 字符向量元胞數(shù)組(MATLAB入門課程)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 第5章:5.4.2 字符串?dāng)?shù)組的基本操作(MATLAB入門課程)

    第5章:5.4.2 字符串?dāng)?shù)組的基本操作(MATLAB入門課程)

    ?講解視頻:可以在bilibili搜索《MATLAB教程新手入門篇——數(shù)學(xué)建模清風(fēng)主講》。? MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講,適合零基礎(chǔ)同學(xué)觀看)_嗶哩嗶哩_bilibili 在文本數(shù)據(jù)預(yù)處理階段,我們通常需要對字符串?dāng)?shù)組進(jìn)行基本的操作。我們將從字符串?dāng)?shù)組的引用開始,逐

    2024年01月16日
    瀏覽(23)
  • 第3章 3.2 MATLAB中的向量(MATLAB入門課程)

    第3章 3.2 MATLAB中的向量(MATLAB入門課程)

    講解視頻:可以在bilibili搜索“MATLAB教程新手入門篇——數(shù)學(xué)建模清風(fēng)主講”。 MATLAB教程新手入門篇(數(shù)學(xué)建模清風(fēng)主講,適合零基礎(chǔ)同學(xué)觀看)_嗶哩嗶哩_bilibili 上一節(jié)我們知道,向量可以視為矩陣的一個特例:若一個矩陣的行數(shù)為1,則它可以視為一個行向量;若列數(shù)為

    2024年04月29日
    瀏覽(39)
  • MATLAB學(xué)習(xí)筆記二——元胞數(shù)組、結(jié)構(gòu)體

    MATLAB學(xué)習(xí)筆記二——元胞數(shù)組、結(jié)構(gòu)體

    讓我們逐一分析 創(chuàng)建元胞數(shù)組 命令行窗口可得結(jié)果為 A = 1×6 cell 數(shù)組 {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} 數(shù)組內(nèi)矩陣賦值,eye函數(shù)用法 結(jié)果為 A = 1×6 cell 數(shù)組 {0×0 double} {3×3 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} 數(shù)組內(nèi)矩陣賦值,magi

    2024年02月10日
    瀏覽(21)
  • 新手入門Java數(shù)組排序及二維數(shù)組(有練習(xí))

    新手入門Java數(shù)組排序及二維數(shù)組(有練習(xí))

    1.數(shù)組的定義方式都有哪幾種 2.基本數(shù)據(jù)類型的數(shù)組中默認(rèn)值分別是什么 byte[] short[] int[] long[] double[] float[] boolean[] char[] String[] 0 0 0 0 0.0 0.0f flase ‘u0000’ null 3.數(shù)組有哪些特征 數(shù)組一旦賦值,長度就固定下來了,不可再改變。數(shù)組的最大下標(biāo)是數(shù)組的長度-1.數(shù)組下標(biāo)從0開始

    2024年02月01日
    瀏覽(27)
  • 【Matlab編程】新手入門第二天

    【Matlab編程】新手入門第二天

    常量、變量、函數(shù)、運(yùn)算符和表達(dá)式是所有程序設(shè)計語言中必不可少的元素,Matlab也不例外。但是Matlab的特殊性在于他對上述這些元素做了很多方面的擴(kuò)展。本章就對此做簡單介紹。 — Matlab提供了8種整數(shù)類型,不同的整數(shù)類型占用的位數(shù)不同,因此能表示的數(shù)值范圍不同。

    2024年02月08日
    瀏覽(14)
  • 【Matlab編程】新手入門第五天

    【Matlab編程】新手入門第五天

    在MATLAB中除了能夠進(jìn)行數(shù)值、矩陣運(yùn)算外,還可以進(jìn)行各種各樣的符號計算。 MATLAB數(shù)值運(yùn)算的對象是數(shù)值,而符號運(yùn)算的對象是非數(shù)值的符號對象。符號對象就是代表非數(shù)值的符號字符串。 符號對象是定義的一種新的數(shù)據(jù)類型(sym類型)用來存儲非數(shù)值的字符符號。在MATLAB中,

    2024年02月04日
    瀏覽(12)
  • 新手入門matlab之線性系統(tǒng)的時域分析

    新手入門matlab之線性系統(tǒng)的時域分析

    ##? matlab是一個基于矩陣運(yùn)算的數(shù)學(xué)軟件,又稱矩陣實(shí)驗(yàn)室,所以里面的所有東西都是以矩陣的形式來進(jìn)行運(yùn)算的? ## ##? ?首先我們先介紹一下構(gòu)建傳遞函數(shù)的基本格式,以及一些函數(shù)的用法?## 一.首先打開matlab,直接在命令行窗口新建對應(yīng)閉環(huán)傳遞函數(shù)的矩陣 ? ?***上面是

    2024年02月06日
    瀏覽(16)
  • 【Matlab數(shù)理統(tǒng)計知識點(diǎn)合集】新手入門第十三天

    【Matlab數(shù)理統(tǒng)計知識點(diǎn)合集】新手入門第十三天

    掌握隨機(jī)數(shù)的產(chǎn)生 了解概率密度函數(shù)等函數(shù)的使用 掌握統(tǒng)計圖表的繪制方法 隨機(jī)數(shù)是專門的隨機(jī)試驗(yàn)的結(jié)果。在統(tǒng)計學(xué)的不同技術(shù)中需要使用隨機(jī)數(shù),比如在從統(tǒng)計總體中抽取有代表性的樣本的時候,或者在將實(shí)驗(yàn)動物分配到不同的試驗(yàn)組的過程中,或者在進(jìn)行蒙特卡羅模

    2023年04月11日
    瀏覽(16)
  • 新手入門Jenkins自動化部署入門詳細(xì)教程

    新手入門Jenkins自動化部署入門詳細(xì)教程

    在實(shí)際開發(fā)中,我們經(jīng)常要一邊開發(fā)一邊測試,當(dāng)然這里說的測試并不是程序員對自己代碼的單元測試,而是同組程序員將代碼提交后,由測試人員測試; 或者前后端分離后,經(jīng)常會修改接口,然后重新部署; 這些情況都會涉及到頻繁的打包部署; 手動打包常規(guī)步驟: 1.提

    2024年02月13日
    瀏覽(31)
  • StarkNet新手入門教程:教你用bitget 錢包入門

    StarkNet新手入門教程:教你用bitget 錢包入門

    理想的Starknet (web3.bitget.com/zh/assets/starknet-wallet) 錢包取決于個人喜好,同時考慮安全性、用戶友好性、帳戶恢復(fù)選項(xiàng)和多通證支持等因素。盡管如此,無論您使用 Starknet (STRK) 的目的是持有還是交易,Bitget Wallet 都是您管理 STRK 以及其他以太坊和 Optimism 加密資產(chǎn)的理想錢包選擇

    2024年03月12日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包