MATLAB - 表格



在 MATLAB 中,表格是一种数据结构,用于存储不同类型数据的表格型数据,这些数据存储在命名列中。您可以轻松地将表格与电子表格或数据库表格关联。您可以轻松地管理和操作 MATLAB 表格中的数据。

由于表格旨在处理不同类型的数据,因此表格的每一列都可以保存不同类型的数据,使其能够灵活地处理异构类型的数据。

在表格中,面向列的单个数据集存储在变量中。表格变量在数据类型和大小方面可能有所不同,只要它们都具有相同数量的行即可。就像结构中的字段一样,表格变量也具有特定的名称。

由于我们已经大量使用了矩阵,让我们了解表格和矩阵的不同之处。

矩阵 表格

矩阵旨在存储相同类型的数据,即所有元素都具有相同的数据类型。因此,矩阵本质上是同构的。

表格列可以具有不同的数据类型,使其适合处理混合数据。因此,表格本质上是异构的。

在矩阵中,我们使用索引来访问行和列的元素。

在表格中,使用列名来访问表格中的数据。这为我们提供了一种更具描述性和意义的数据访问方式。

使用表格的优势

  • 表格列被分配了名称,因此可以很容易地引用和更改特定数据。

  • 表格列可以具有不同的数据类型,允许您在一个结构中存储各种信息。

  • 表格带有内置函数,有助于快速概述数据。它还有助于处理缺失数据和重复数据。

使用表格的缺点

  • 对于大型数据集,与简单的数组相比,表格占用的内存更多。

  • 某些矩阵运算可能无法直接应用于表格。

创建 MATLAB 表格

要创建一个 MATLAB 表格,我们将使用 MATLAB 的内置函数 table()。您可以通过两种方式使用 table() 函数。

  • 一种是从现有的工作区变量创建表格。

  • 第二种是创建一个表格,为稍后填充值的变量预留空间。

语法

T = table(var1,...,varN)
T = table('Size',sz,'VariableTypes',varTypes)

第一种语法 table(var1…varN),这里 var1…varN 是成为表格中一列的变量,它们应该具有相同数量的行。生成的表格 T 将包含这些列,列名将根据变量名自动分配。

第二种语法 table('Size',sz,'VariableTypes',varTypes),

'Size', sz − 指定表格的大小,即行数和列数。sz 是一个二元素向量,其中第一个元素表示行数,第二个元素表示列数。

'VariableTypes', varTypes − 指定表格中变量(列)的数据类型。varTypes 是一个元胞数组,每个元胞包含对应列的数据类型。

T = table(var1,...,varN) − 通过组合现有的变量 var1 到 varN 创建一个表格,而

T = table('Size',sz,'VariableTypes',varTypes) − 语法预先分配表格的空间并预先定义变量类型。当您预先知道数据的大小和类型时,这尤其有用。

表格创建示例

示例 1

在这个例子中,让我们检查学生的成绩,所以我们有学生的名字和他们的成绩。

std_names = {'Tiya', 'Riya', 'Siya', 'Jiya'}
std_scores = [85, 72, 92, 78]
studentTable = table(std_names, std_scores)

在上面的例子中,我们有包含学生姓名和成绩的变量 std_names 和 std_scores。table 函数将这些变量组合起来创建 studentTable,其中第一列命名为 'std_names',第二列命名为 'std_scores'。

在 MATLAB 命令窗口中执行后,输出为:

std_names =
{
  [1,1] = Tiya
  [1,2] = Riya
  [1,3] = Siya
  [1,4] = Jiya
}

std_scores =

   85   72   92   78

示例 2

使用与上述示例中相同的变量,让我们向其中添加自定义列名。

std_names = {'Tiya', 'Riya', 'Siya', 'Jiya'}
std_scores = [85, 72, 92, 78]
studentTable = table(std_names, std_scores, 'VariableNames', {'Student', 'TestScore'})

现在,当您在 MATLAB 命令窗口中执行相同的操作时,该表格将具有“学生”和“考试成绩”之类的列名。

std_names =
{
  [1,1] = Tiya
  [1,2] = Riya
  [1,3] = Siya
  [1,4] = Jiya
}

std_scores =

   85   72   92   78

示例 3

在这个例子中,我们将创建一个具有大小和变量类型的表格。

tableSize = [5, 3]
variableTypes = {'string', 'double', 'int32'}
Table = table('Size', tableSize, 'VariableTypes', variableTypes)

在这个例子中,tableSize 将表格的大小定义为 5 行 3 列,variableTypes 指示第一列应为 'string' 类型,第二列为 'double' 类型,第三列为 'int32' 类型。

当您在 MATLAB 命令窗口中执行相同的操作时,输出为:

tableSize =

   5   3

variableTypes =
{
  [1,1] = string
  [1,2] = double
  [1,3] = int32
}

访问表格数据

假设我们有以下表格。

std_names = {'Tiya', 'Riya', 'Siya', 'Jiya'}
std_scores = [85, 72, 92, 78]
studentTable = table(std_names, std_scores, 'VariableNames', {'Student', 'TestScore'})

输出将是:

std_names =
{
  [1,1] = Tiya
  [1,2] = Riya
  [1,3] = Siya
  [1,4] = Jiya
}

std_scores =

   85   72   92   78

要访问数据,您可以按照以下步骤操作:

T.Variables

例如

studentTable.Student
studentTable.TestScore

执行上述操作后,您将得到:

>> studentTable.Student
studentTable.TestScore


ans =

  1x4 cell array

    {'Tiya'}    {'Riya'}    {'Siya'}    {'Jiya'}


ans =

    85    72    92    78

获取单个姓名和分数,您可以执行以下操作:

studentTable.Student{1}

执行后,您将得到:

>> studentTable.Student{1}

ans =

    'Tiya'

带有行名和列名的表格

在上一节中,我们已经看到了如何向表格中添加列名。在这里,我们将添加行名并访问已创建的表格中的数据。

Names = {'Siya';'Riya';'Jiya';'Tiya';'Kiya'};
Age = [48;23;28;20;49];
Height = [105;140;150;130;156];
Weight = [60;80;50;45;54];

T = table(Age,Weight,Height,'RowNames',Names)

Age、Weight 和 Height 数据向量成为表格的列。'RowNames' 参数将 Names 元胞数组中的名称指定为每个条目的行名。

当您在 MATLAB 命令窗口中执行相同的操作时,输出为:

>> Names = {'Siya';'Riya';'Jiya';'Tiya';'Kiya'};
Age = [48;23;28;20;49];
Height = [105;140;150;130;156];
Weight = [60;80;50;45;54];

T = table(Age,Weight,Height,'RowNames',Names)

T =

  5x3 table

            Age    Weight    Height
            ___    ______    ______

    Siya    48       60       105  
    Riya    23       80       140  
    Jiya    28       50       150  
    Tiya    20       45       130  
    Kiya    49       54       156  

现在,当您想要访问与名称相关的任何内容时,可以按如下方式进行:

T('Riya',:)

执行后的输出为:

>> T('Riya',:)

ans =

  1x3 table

             Age    Weight      Height
             ___    ______    ______

    Riya     23       80         140  

要获取多行数据,可以按照如下方法:

T({'Riya','Tiya'},:)

执行后的输出为:

>> T({'Riya','Tiya'},:)

ans =

  2x3 table

            Age    Weight    Height
            ___    ______    ______

    Riya    23       80       140  
    Tiya    20       45       130  
广告