MATLAB - 分類陣列



分類陣列是 MATLAB 中的一種資料型別,允許處理離散資料。離散資料是指由不同的、獨立的值或類別組成的資料型別。離散資料只能取特定的、有限的值,通常是整數或不同的類別。

分類陣列提供了一種有效儲存和使用者友好的非數值資料處理方法,並有助於保留資料值的描述性標籤。

以下是使用分類陣列的一些優點。

  • 與元胞陣列或常規字串陣列相比,分類陣列更有效地使用記憶體。這在處理大型資料集時尤其有利。
  • 分類陣列能夠更快地進行資料操作和分析。許多函式和運算都針對分類陣列進行了最佳化,與處理字串相比,這提高了效能。
  • 分類陣列使管理和維護資料中一致的類別變得容易。
  • 使用分類陣列建立的視覺化通常具有更清晰的標籤和圖例,從而更容易傳達資料中的見解。

此外,使用分類陣列還有一些缺點:

  • 分類陣列最適合管理離散資料。如果您的資料包含連續或數值資料,則使用分類陣列可能不是最佳選擇,因為它們主要設計用於非數值的分類資訊。
  • 很難對分類陣列執行復雜的運算。

建立分類陣列

可以使用以下方法在 MATLAB 中建立分類陣列:

  • categorical() 函式
  • discretize() 函式

使用 categorical() 函式

可以使用 categorical() 函式將字串或數字陣列轉換為分類陣列。

語法

C = categorical(A)

這裡 C 是從給定陣列 A 建立的分類陣列。

示例 1

在這個例子中,我們將使用元胞陣列資料,其詳細資訊如下所示。

data = {'Red', 'Blue', 'Green', 'Red', 'Green'};
primary_colors  = categorical(data)

使用 categorical() 函式將元胞陣列轉換為分類陣列。

在 MATLAB 命令視窗中執行時,輸出為:

>> data = {'Red', 'Blue', 'Green', 'Red', 'Green'};
primary_colors  = categorical(data)

primary_colors = 

   1x5 categorical array

   Red      Blue      Green      Red      Green 

>> 

如果您想從 primary_colors 中瞭解類別,您可以使用 categories() 方法,該方法有助於從給定的分類陣列中獲取唯一類別。

categories(primary_colors)

此方法將給出分類陣列 primary_colors 中存在的不同類別。

在 MATLAB 命令視窗中執行相同的操作時,輸出如下:

>> categories(primary_colors)

ans =

   3x1 cell array
   
   {'Blue' }
   {'Green'}
   {'Red'  }

>>

示例 2

在這個例子中,我們將首先建立一個數值陣列,然後為整數值分配類別。

A = [1 3 2; 2 1 3; 3 1 2]

C = categorical(A,[1 2 3],{'AA' 'BB' 'CC'})

在上面的例子中,A 是一個 3 行 3 列的矩陣。此矩陣的每個元素都是一個整數。

現在,程式碼 C = categorical(A,[1 2 3],{'AA' 'BB' 'CC'}) 使用指定的類別將數值陣列 A 轉換為分類陣列 C。

  • A 是您要轉換的陣列。
  • [1 2 3] 指定陣列 A 中存在的不同整數值。
  • {'AA' 'BB' 'CC'} 提供要分配給整數值 1、2 和 3 的相應類別。

分類陣列 C 的每個元素都對應於原始陣列 A 的元素,它將整數值對映到其相應的類別。例如:

  • A 中的整數 1 對映到 C 中的 'CC'。
  • A 中的整數 2 對映到 C 中的 'BB'。
  • A 中的整數 3 對映到 C 中的 'AA'。

在 Matlab 中執行後,輸出為:

>> A = [1 3 2; 2 1 3; 3 1 2]

C = categorical(A,[1 2 3],{'AA' 'BB' 'CC'})

A =

   1     3     2
   2     1     3
   3     1     2

C = 

  3x3 categorical array

   AA      CC      BB 
   BB      AA      CC 
   CC      AA      BB 

>> 

示例 3

在這個例子中,我們將建立一個有序分類陣列。

有序分類陣列遵循現有類別中的自然順序或層次結構。

A = [3 2;3 3;3 2;2 1;3 2]
valueset = [1:3];
categorynames = {'poor' 'fair' 'good'};

B = categorical(A,valueset,categorynames ,'Ordinal',true)

矩陣 A 是一個 5x2 矩陣,包含整數值。此矩陣有 5 行 2 列,每個元素都是一個整數。

valueset 是一個向量 [1, 2, 3],它定義了矩陣 A 中可能存在的整數值。這表示有序類別的級別。

categorynames 是一個元胞陣列 {'poor', 'fair', 'good'},它將相應的類別名稱分配給 valueset 中的值。類別名稱的順序對應於 valueset 中值的順序。

The code : B = categorical(A, valueset, categorynames, 'Ordinal', true); 

將數值陣列 A 轉換為使用指定的 valueset 和 categorynames 的有序分類陣列 B。

  • A 是要轉換的數值陣列。
  • valueset 定義陣列中存在的不同整數值。
  • categorynames 為整數值提供相應的類別名稱。
  • 'Ordinal', true 指定分類陣列 B 應被視為有序,這意味著類別的順序很重要。

執行後,輸出如下:

>> A = [3 2;3 3;3 2;2 1;3 2]
valueset = [1:3];
categorynames = {'poor' 'fair' 'good'};

B = categorical(A,valueset,categorynames ,'Ordinal',true)

A =

   3     2
   3     3
   3     2
   2     1
   3     2

B = 

  5x2 categorical array

   good      fair 
   good      good 
   good      fair 
   fair      poor 
   good      fair 

>> 

使用 discretize() 函式

建立類別型別資料的另一種方法是在 Matlab 中使用 discretize() 函式。

此函式採用數值陣列,並根據指定的邊緣或所需的箱數將其劃分為離散類別或箱。

語法

Y = discretize(X,edges)

這裡

X - 您想要離散化的輸入資料。

edges - 您想要將資料分類到的箱或區間的邊緣。

示例

scores = [68, 75, 82, 90, 55, 78, 92, 60, 88, 72];
edges = [0, 60, 80, 100];
categories = discretize(scores, edges)

在這個例子中,edges 陣列定義了對分數進行分類的區間。低於 60 的分數將被歸類為“低”,60 到 80 之間的分數將被歸類為“中”,80 到 100 之間的分數將被歸類為“高”。

執行後,輸出如下:

>> scores = [68, 75, 82, 90, 55, 78, 92, 60, 88, 72];
edges = [0, 60, 80, 100];
categories = discretize(scores, edges)

categories =

   2     2     3     3     1     2     3     2     3     2
廣告
© . All rights reserved.