含蓄的薯片 · 如何在PS里使用stable ...· 2 周前 · |
细心的板栗 · 模板处理 · PHPword新版开发指南 · 看云· 2 周前 · |
留胡子的打火机 · Urbackup Server ...· 1 周前 · |
痴情的雪糕 · DELETE - Apache Doris· 1 周前 · |
聪明伶俐的跑步鞋 · sfguide-using-snowflak ...· 5 天前 · |
一直单身的烈酒 · 南阳-信阳-固始(信阳段)天然气输气管道工程 ...· 2 周前 · |
小胡子的薯片 · 浙大家教中心-家教教师综合搜索平台· 1 月前 · |
非常酷的双杠 · 顾敏院士带领三位青年科研人员全职加盟上理工 ...· 1 月前 · |
多情的长颈鹿 · 什么网站可以看胡桃大战史莱姆原神官网社区有吗 ...· 2 月前 · |
气宇轩昂的羊肉串 · 荣耀v7屏幕总成-荣耀v7屏幕总成促销价格、 ...· 2 月前 · |
具有命名变量的表数组(变量可包含不同类型的数据)
table
数组存储列向数据或表格数据,例如文本文件或电子表格中的列。表将每一段列向数据存储在一个
变量
中。表变量可以具有不同的数据类型和大小,只要所有变量具有相同的行数即可。表变量有名称,就像结构体的字段有名称一样。可以使用
summary
函数获取有关表的信息。
如果您的表格数据包含时间戳,请考虑使用
timetable
来存储和分析您的数据。
要对表进行索引,可以使用圆括号
()
返回子表,或者使用花括号
{}
提取内容。您可以使用名称访问变量和行。有关使用数值和名称进行索引的详细信息,请参阅
访问表中的数据
。
您可以使用
Import Tool
或
readtable
函数将文件中的数据读取到表中。也可以按如下所述,使用
table
函数根据现有的电子表格变量来创建一个表。
您也可以创建一个为变量预分配空间的表,以后再填充这些变量的值。要创建一个为变量预分配空间的表,请使用
table
函数并将
'Size'
作为第一个输入参数,如下所述。
T = table(
根据输入变量
var1,...,varN
)
var1,...,varN
创建表。变量的大小和数据类型可以不同,但所有变量的行数必须相同。
如果输入是工作区变量,则
table
将输入名称指定为输出表中的变量名称。否则,
table
将指定
'Var1',...,'Var
形式的变量名称,其中
N
'
是变量的数量。
N
T = table(
___
,
使用一个或多个名称-值对组参数指定其他输入参数。例如,您可以使用
Name,Value
)
'VariableNames'
名称-值对组指定变量名称。您可将此语法与上述语法中的任何输入参数一起使用。
T = table
创建一个空的 0×0 表。
var1,...,varN
—
输入变量
输入变量,指定为具有相同行数的数组。输入变量可以具有不同的大小和数据类型。
常见的输入变量为数值数组、逻辑数组、字符数组、结构体数组或元胞数组。输入变量也可以是数组对象。此类数组必须支持
var(index1,...,indexN)
形式的索引,其中
index1
为与变量
var
的行对应的数值或逻辑向量。此外,该数组还必须使用
dim
参数实现
vertcat
方法和
size
方法。
示例:
table([1:4]',ones(4,3,2),eye(4,2))
根据含有 4 行但大小不同的变量创建表。
示例:
table([1:3]',{'one';'two';'three'},categorical({'A';'B';'C'}))
根据含有 3 行但数据类型不同的变量创建表。
sz
—
预分配的表的大小
预分配的表的大小,指定为二元素数值向量。
sz
的第一个元素指定行数,第二个元素指定表变量的数量。
要仅创建变量而不包含任何行,请将
0
指定为
sz
的第一个元素。
示例:
T = table('Size',[50 3],'VariableTypes',{'string','double','datetime'})
为一个包含字符串数组、双精度数组和日期时间数组的表预分配 50 个行。
示例:
T = table('Size',[0 4],'VariableTypes',varTypes)
指定零个行和四个变量。
varTypes
—
预分配变量的数据类型
预分配变量的数据类型,指定为字符向量元胞数组或字符串数组。由
varTypes
指定的类型的数量必须等于由
sz
的第二个元素指定的变量的数量。
varTypes
可以包含任何数据类型的名称,包括表中显示的名称。
数据类型名称 |
每个元素中的初始值 |
---|---|
|
双精度或单精度
|
|
双精度或单精度
|
|
有符号 8 位、16 位、32 位或 64 位整数
|
|
无符号 8 位、16 位、32 位或 64 位整数
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
没有字段的标量结构体 |
|
没有变量的表 |
|
没有变量的时间表,行时间为
|
对于任何其他数据类型,初始值是该类型或类用于“填充”数组的未分配元素的值。
如果将
'char'
指定为数据类型,则
table
会将对应的变量预分配为字符向量元胞数组,而不是字符数组。最佳做法是避免创建字符数组形式的表或时间表变量。处理表或时间表中的文本数据时,请考虑使用字符串数组或分类数组。
将可选的参数对组指定为
Name1=Value1,...,NameN=ValueN
,其中
Name
是参数名称,
Value
是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。
在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将
Name
引起来。
示例:
T = table(Age,Height,Weight,'RowNames',LastName)
创建一个包含由变量
LastName
指定的行名称的表。
VariableNames
—
变量名称
变量名称,指定为字符向量元胞数组或字符串数组,其元素为非空且不同。
数组中的名称的数量必须等于时间表变量的数量。
table
函数还将变量名称存储在表的
VariableNames
属性中。
变量名称可以包含任何 Unicode ® 字符,包括空格和非 ASCII 字符。
示例:
T = table(lat,lon,'VariableNames',["Latitude","Longitude"])
基于输入数组
lat
和
lon
创建一个表,并命名对应的表变量
Latitude
和
Longitude
。
RowNames
—
行名称
行名称,指定为字符向量元胞数组或字符串数组,其元素为非空且不同。
数组中的名称的数量必须等于行的数量。
table
函数还将行名称存储在表的
RowNames
属性中。
行名称可以包含任何 Unicode 字符,包括空格和非 ASCII 字符。
table
函数从行名称中删除任何前导或尾部空白字符。
示例:
T = table(Age,Height,Weight,'RowNames',LastName)
创建一个包含由变量
LastName
指定的行名称的表。
DimensionNames
—
维度名称
自 R2021a 开始提供
维度名称,指定为二元素字符向量元胞数组或二元素字符串数组,其元素为非空且不同。
table
函数还将维度名称存储在表的
DimensionNames
属性中。
维度名称可以包含任何 Unicode 字符,包括空格和非 ASCII 字符。
在 R2021a 之前,只能通过设置
DimensionNames
属性来指定维度名称。
示例:
T = table(Age,Height,Weight,'RowNames',LastName,'DimensionNames',["PatientName","PatientData"])
创建一个表,其中第一个维度的名称为
"PatientName"
,第二个维度的名称为
"PatientData"
。
访问表元数据属性
表包含用于描述该表及其变量的元数据属性。使用语法
访问这些属性,其中
tableName
.Properties.
PropertyName
是属性的名称。例如,可以使用语法
PropertyName
T.Properties.VariableNames
访问表
T
中变量的名称。
您可以使用
语法返回所有元数据属性的摘要。
tableName
.Properties
表通过
Properties
属性提供元数据访问,因为您可以使用圆点语法直接访问表数据。例如,如果表
T
有名为
Var1
的变量,则可以使用语法
T.Var1
访问该变量中的值。
DimensionNames
—
维度名称
{'Row','Variables'}
(默认) |
二元素字符向量元胞数组
|
二元素字符串数组
维度名称,指定为二元素字符向量元胞数组或二元素字符串数组。
维度名称可以包含任何 Unicode 字符,包括空格和非 ASCII 字符。
如果使用字符串数组指定此属性,则将其转换并存储为字符向量元胞数组。
您可以使用这两个维度名称来访问表数据。
如果表有行名称,并且您使用圆点语法和第一个维度名称,则可以将行名称作为向量来访问。
如果使用圆点语法和第二个维度名称,则会将所有变量的数据串联在一个数组中,就像已使用
{:,:}
语法对表进行索引一样。
创建表并显示其维度名称。您可以结合使用圆点语法和维度名称来访问行名称和数据。
load patients T = table(Age,Height,Weight,Systolic,Diastolic, ... 'RowNames',LastName); T.Properties.DimensionNames
ans = 1x2 cell
{'Row'} {'Variables'}
使用第一个维度名称访问行名称。显示前五个名称。
T.Row(1:5)
ans = 5x1 cell
{'Smith' }
{'Johnson' }
{'Williams'}
{'Jones' }
{'Brown' }
使用第二个维度名称访问数据。此语法等效于
T{:,:}
。
T.Variables
ans = 100×5
38 71 176 124 93
43 69 163 109 77
38 64 131 125 83
40 67 133 117 75
49 64 119 122 80
46 68 142 121 70
33 64 142 130 88
40 68 180 115 82
28 68 183 115 78
31 66 132 118 86
使用
Properties.DimensionNames
属性修改其维度的名称。更改维度名称后,可以分别使用语法
T.Patient
和
T.Data
访问行名称和数据。
T.Properties.DimensionNames = ["Patient","Data"]; T.Properties
ans = TableProperties with properties: Description: '' UserData: [] DimensionNames: {'Patient' 'Data'} VariableNames: {'Age' 'Height' 'Weight' 'Systolic' 'Diastolic'} VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowNames: {100x1 cell} CustomProperties: No custom properties are set. Use addprop and rmprop to modify CustomProperties.
RowNames
—
行名称
{}
(默认) |
字符向量元胞数组
|
字符串数组
行名称,指定为字符向量元胞数组或字符串数组,其元素为非空且不同。如果
RowNames
不为空,则行名称数必须等于表中的行数。
行名称可以包含任何 Unicode 字符,包括空格和非 ASCII 字符。
如果您分配的行名称包含前导或尾部空白字符,则 MATLAB ® 会将它们从行名称中删除。
查看表时,行名称是可见的。此外,您也可以在圆括号或花括号中使用行名称来访问表数据。
访问行名称的另一种方法是使用圆点语法和表的第一个维度的名称。
如果使用字符串数组指定此属性,则将其转换并存储为字符向量元胞数组。
创建一个表。然后添加行名称并按名称访问行。
load patients
T = table(Age,Height,Weight,Smoker,Systolic,Diastolic,SelfAssessedHealthStatus);
T.SelfAssessedHealthStatus = string(SelfAssessedHealthStatus);
使用
Properties.RowNames
属性添加行名称。默认情况下,表没有行名称,但您可以随时添加它们。
T.Properties.RowNames = string(LastName); head(T,5)
Age Height Weight Smoker Systolic Diastolic SelfAssessedHealthStatus ___ ______ ______ ______ ________ _________ ________________________ Smith 38 71 176 true 124 93 "Excellent" Johnson 43 69 163 false 109 77 "Fair" Williams 38 64 131 false 125 83 "Good" Jones 40 67 133 false 117 75 "Fair" Brown 49 64 119 false 122 80 "Good"
访问行名称的另一种方法是使用圆点语法和表的第一个维度的名称。显示前五个行名称。
T.Properties.DimensionNames
ans = 1x2 cell
{'Row'} {'Variables'}
T.Row(1:5)
ans = 5x1 cell {'Smith' } {'Johnson' } {'Williams'} {'Jones' } {'Brown' }按行名称对表进行索引。
T(["Smith","Brown"],:)ans=2×7 table Age Height Weight Smoker Systolic Diastolic SelfAssessedHealthStatus ___ ______ ______ ______ ________ _________ ________________________ Smith 38 71 176 true 124 93 "Excellent" Brown 49 64 119 false 122 80 "Good"
Description
—
表描述
''
(默认) |
字符向量
|
字符串标量
表描述,指定为字符向量或字符串标量。使用
summary
函数时,此描述是可见的。
如果使用字符串标量指定此属性,则将其转换并存储为字符向量。
创建一个表。修改表的描述。显示结果摘要。
load patients T = table(LastName,Age,Height,Weight); T.LastName = string(T.LastName); T.Properties.Description = "Simulated patient data"; summary(T)
Description: Simulated patient data Variables: LastName: 100x1 string Age: 100x1 double Values: Min 25 Median 39 Max 50 Height: 100x1 double Values: Min 60 Median 67 Max 72 Weight: 100x1 double Values: Min 111 Median 142.5 Max 202
UserData
—
其他表信息
[]
(默认) |
数组
其他表信息,指定为数组。您可以使用此属性向表添加任何类型的数据。
创建一个表。将匿名函数作为与表相关联的一段用户数据附加。
load patients
T = table(LastName,Age,Height,Weight,Smoker,Systolic,Diastolic);
formula = @(x) x.^2;
T.Properties.UserData = formula;
T.Properties
ans = TableProperties with properties: Description: '' UserData: @(x)x.^2 DimensionNames: {'Row' 'Variables'} VariableNames: {'LastName' 'Age' 'Height' 'Weight' 'Smoker' 'Systolic' 'Diastolic'} VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowNames: {} CustomProperties: No custom properties are set. Use addprop and rmprop to modify CustomProperties.
VariableNames
—
变量名称
变量名称,指定为字符向量元胞数组或字符串数组,其元素为非空且不同。名称的数量必须等于变量数 。
变量名称可以包含任何 Unicode 字符,包括空格和非 ASCII 字符。
查看表和使用
summary
函数时,变量名称是可见的。此外,您也可以在圆括号、花括号中使用变量名称,或者将变量名称与点索引配合使用来访问表数据。
如果使用字符串数组指定此属性,则将其转换并存储为字符向量元胞数组。
创建一个使用默认变量名称的表。然后使用
Properties.VariableNames
属性修改这些名称。
T = table(["Smith";"Nguyen";"Williams";"Fernandez";"Brown"],[38;43;38;40;49], ... [71;69;64;67;64],[176;163;131;133;119])
T=5×4 table Var1 Var2 Var3 Var4 ___________ ____ ____ ____ "Smith" 38 71 176 "Nguyen" 43 69 163 "Williams" 38 64 131 "Fernandez" 40 67 133 "Brown" 49 64 119T.Properties.VariableNames = ["LastName","Age","Height","Weight"]T=5×4 table LastName Age Height Weight ___________ ___ ______ ______ "Smith" 38 71 176 "Nguyen" 43 69 163 "Williams" 38 64 131 "Fernandez" 40 67 133 "Brown" 49 64 119
显示和修改变量的基本方法是使用圆点语法按名称访问它们。
T.Ageans = 5×1
T.Age(1) = 53T=5×4 table LastName Age Height Weight ___________ ___ ______ ______ "Smith" 53 71 176 "Nguyen" 43 69 163 "Williams" 38 64 131 "Fernandez" 40 67 133 "Brown" 49 64 119
VariableDescriptions
—
变量描述
{}
(默认) |
字符向量元胞数组
|
字符串数组
变量描述,指定为字符向量元胞数组或字符串数组。此属性可以是空元胞数组,这是默认值。如果数组不为空,则它必须包含与变量相同数量的元素。您可以为没有描述的变量指定单独的空字符向量或空字符串。
使用
summary
函数时,变量描述是可见的。
如果使用字符串数组指定此属性,则将其转换并存储为字符向量元胞数组。
创建一个表。修改变量描述。显示结果摘要。
load patients T = table(LastName,Age,Height,Weight,Smoker,Systolic,Diastolic); T.LastName = string(T.LastName); T.Properties.VariableDescriptions = ["","","","", ... "Has the patient ever been a smoker", ... "Systolic Pressure","Diastolic Pressure"]; summary(T)
Variables: LastName: 100x1 string Age: 100x1 double Values: Min 25 Median 39 Max 50 Height: 100x1 double Values: Min 60 Median 67 Max 72 Weight: 100x1 double Values: Min 111 Median 142.5 Max 202 Smoker: 100x1 logical Properties: Description: Has the patient ever been a smoker Values: True 34 False 66 Systolic: 100x1 double Properties: Description: Systolic Pressure Values: Min 109 Median 122 Max 138 Diastolic: 100x1 double Properties: Description: Diastolic Pressure Values: Min 68 Median 81.5 Max 99
VariableUnits
—
变量单位
{}
(默认) |
字符向量元胞数组
|
字符串数组
变量单位,指定为字符向量元胞数组或字符串数组。此属性可以为空元胞数组(默认值)。如果数组不为空,则它必须包含与变量相同数量的元素。您可以为没有单位的变量指定单独的空字符向量或空字符串。
使用
summary
函数时,变量单位是可见的。
如果使用字符串数组指定此属性,则将其转换并存储为字符向量元胞数组。
创建一个表。修改变量单位。显示结果摘要。
load patients T = table(LastName,Age,Height,Weight,Smoker,Systolic,Diastolic); T.LastName = string(T.LastName); T.Properties.VariableUnits = ["","Yrs","In","Lbs","","mm Hg","mm Hg"]; summary(T)
Variables: LastName: 100x1 string Age: 100x1 double Properties: Units: Yrs Values: Min 25 Median 39 Max 50 Height: 100x1 double Properties: Units: In Values: Min 60 Median 67 Max 72 Weight: 100x1 double Properties: Units: Lbs Values: Min 111 Median 142.5 Max 202 Smoker: 100x1 logical Values: True 34 False 66 Systolic: 100x1 double Properties: Units: mm Hg Values: Min 109 Median 122 Max 138 Diastolic: 100x1 double Properties: Units: mm Hg Values: Min 68 Median 81.5 Max 99
VariableContinuity
—
状态为连续或离散变量
[]
(默认) |
字符向量元胞数组
|
字符串数组
状态为连续或离散变量,指定为字符向量元胞数组或字符串数组。
虽然表和时间表都有此属性,但只有时间表使用此属性。有关详细信息,请参阅
timetable
的
VariableContinuity
属性。
CustomProperties
—
表及其变量的自定义元数据
CustomProperties
对象
表的自定义元数据及其变量,指定为
CustomProperties
对象。
CustomProperties
对象是可以添加到表中的自定义元数据的容器。默认情况下,
CustomProperties
的属性为零。添加到
CustomProperties
的每个属性都可以包含表元数据或变量元数据。如果属性包含变量元数据,则其值必须是数组,并且数组中的元素数必须等于表变量的数量。
注意:
您
只能
使用
addprop
和
rmprop
为自定义元数据添加或删除属性。您不能添加或删除
对象的属性。
tableName
.Properties
创建一个表。
load patients
T = table(LastName,Age,Height,Weight,Smoker,Systolic,Diastolic);
添加可以保存有关表及其变量的自定义元数据的属性。在此示例中,元数据是仪器的名称,
true
和
false
值指示是否绘制变量,以及输出文件的名称。要添加属性,请使用
addprop
函数。
T = addprop(T,["Instrument","ToPlot","OutputFile"],["variable","variable","table"]); T.Properties
ans = TableProperties with properties: Description: '' UserData: [] DimensionNames: {'Row' 'Variables'} VariableNames: {'LastName' 'Age' 'Height' 'Weight' 'Smoker' 'Systolic' 'Diastolic'} VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowNames: {} Custom Properties (access using t.Properties.CustomProperties.<name>): OutputFile: [] Instrument: [] ToPlot: []
使用圆点语法将值赋给自定义元数据。将由文本值构成的数组赋给自定义元数据时,最佳做法是使用字符串数组,而不是字符向量元胞数组。如果
CustomProperties
的属性是字符向量元胞数组,则无法防止您以后将非文本值指定为元胞数组的元素。
T.Properties.CustomProperties.Instrument = ["","","height rod","scale","","blood pressure cuff","blood pressure cuff"]; T.Properties.CustomProperties.ToPlot = [false false true true false true true]; T.Properties.CustomProperties.OutputFile = 'patientData.csv'; T.Properties
ans = TableProperties with properties: Description: '' UserData: [] DimensionNames: {'Row' 'Variables'} VariableNames: {'LastName' 'Age' 'Height' 'Weight' 'Smoker' 'Systolic' 'Diastolic'} VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowNames: {} Custom Properties (access using t.Properties.CustomProperties.<name>): OutputFile: 'patientData.csv' Instrument: ["" "" "height rod" "scale" "" "blood pressure cuff" "blood pressure cuff"] ToPlot: [0 0 1 1 0 1 1]从
T
中删除OutputFile
属性。T = rmprop(T,"OutputFile"); T.Properties
ans = TableProperties with properties: Description: '' UserData: [] DimensionNames: {'Row' 'Variables'} VariableNames: {'LastName' 'Age' 'Height' 'Weight' 'Smoker' 'Systolic' 'Diastolic'} VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowNames: {} Custom Properties (access using t.Properties.CustomProperties.<name>): Instrument: ["" "" "height rod" "scale" "" "blood pressure cuff" "blood pressure cuff"] ToPlot: [0 0 1 1 0 1 1]
在表中存储关于一组患者的数据。您可以执行计算并将结果存储在同一个表中。您可以为表添加注释以对您的工作和表变量进行描述。
首先,创建包含患者数据的工作区变量。这些变量可以具有任何数据类型,但必须具有相同的行数。
LastName = {'Sanchez';'Johnson';'Li';'Diaz';'Brown'}; Age = [38;43;38;40;49]; Smoker = logical([1;0;1;0;1]); Height = [71;69;64;67;64]; Weight = [176;163;131;133;119]; BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];
创建一个表
T
,作为工作区变量的容器。
table
函数使用工作区变量名称作为
T
中表变量的名称。一个表变量可以有多个列。例如,T 中的
BloodPressure
变量是一个 5×2 数组。
T = table(LastName,Age,Smoker,Height,Weight,BloodPressure)
T=5×6 table
LastName Age Smoker Height Weight BloodPressure
___________ ___ ______ ______ ______ _____________
{'Sanchez'} 38 true 71 176 124 93
{'Johnson'} 43 false 69 163 109 77
{'Li' } 38 true 64 131 125 83
{'Diaz' } 40 false 67 133 117 75
{'Brown' } 49 true 64 119 122 80
您可以使用点索引来访问表变量。例如,使用
T.Height
中的值计算患者的平均身高。
meanHeight = mean(T.Height)
meanHeight = 67
计算体重指数 (BMI),并将其添加为新的表变量。您还可以使用圆点语法在一个步骤中添加和命名表变量。
T.BMI = (T.Weight*0.453592)./(T.Height*0.0254).^2
T=5×7 table
LastName Age Smoker Height Weight BloodPressure BMI
___________ ___ ______ ______ ______ _____________ ______
{'Sanchez'} 38 true 71 176 124 93 24.547
{'Johnson'} 43 false 69 163 109 77 24.071
{'Li' } 38 true 64 131 125 83 22.486
{'Diaz' } 40 false 67 133 117 75 20.831
{'Brown' } 49 true 64 119 122 80 20.426
使用 BMI 计算的描述对表进行注释。您可以使用通过
T.Properties
访问的元数据来对
T
及其变量进行注释。
T.Properties.Description = 'Patient data, including body mass index (BMI) calculated using Height and Weight';
T.Properties
ans = TableProperties with properties: Description: 'Patient data, including body mass index (BMI) calculated using Height and Weight' UserData: [] DimensionNames: {'Row' 'Variables'} VariableNames: {'LastName' 'Age' 'Smoker' 'Height' 'Weight' 'BloodPressure' 'BMI'} VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowNames: {} CustomProperties: No custom properties are set. Use addprop and rmprop to modify CustomProperties.
使用表的第二个维度的名称,以矩阵形式访问表中的所有数据。
创建一个关于一组患者、包含五行数据的表。
Age = [38;43;38;40;49]; Smoker = logical([1;0;1;0;1]); Height = [71;69;64;67;64]; Weight = [176;163;131;133;119]; BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80]; T = table(Age,Smoker,Height,Weight,BloodPressure)
T=5×5 table
Age Smoker Height Weight BloodPressure
___ ______ ______ ______ _____________
38 true 71 176 124 93
43 false 69 163 109 77
38 true 64 131 125 83
40 false 67 133 117 75
49 true 64 119 122 80
使用
DimensionNames
属性显示表的维度名称。第二个维度的默认名称是
Variables
。
T.Properties.DimensionNames
ans = 1x2 cell
{'Row'} {'Variables'}
使用语法
T.Variables
以矩阵形式访问表数据。此语法等同于使用花括号语法
T{:,:}
访问所有内容。如果表数据不能串联为一个矩阵,则会产生错误消息。
T.Variables
ans = 5×6
38 1 71 176 124 93
43 0 69 163 109 77
38 1 64 131 125 83
40 0 67 133 117 75
49 1 64 119 122 80
重命名第二个维度。如果更改名称,则可以使用新名称访问数据。
T.Properties.DimensionNames{2} = 'PatientData';
T.PatientData
ans = 5×6
38 1 71 176 124 93
43 0 69 163 109 77
38 1 64 131 125 83
40 0 67 133 117 75
49 1 64 119 122 80
通过指定表的大小和变量的数据类型来预分配一个表。
table
函数使用适合于您指定的数据类型的默认值填充变量。它还会为变量提供默认名称,但您也可以自行指定变量名称。预分配可为稍后添加到表中的数据提供空间。
sz = [4 3]; varTypes = {'double','datetime','string'}; T = table('Size',sz,'VariableTypes',varTypes)
T=4×3 table
Var1 Var2 Var3
____ ____ _________
0 NaT <missing>
0 NaT <missing>
0 NaT <missing>
0 NaT <missing>
要为变量指定名称,请使用
'VariableNames'
名称-值对组参数。
varNames = {'Temperature','Time','Station'}; T2 = table('Size',sz,'VariableTypes',varTypes,'VariableNames',varNames)
T2=4×3 table
Temperature Time Station
___________ ____ _________
0 NaT <missing>
0 NaT <missing>
0 NaT <missing>
0 NaT <missing>
将数据行添加到
T2
的前两行。当您的代码一次性添加一行数据或几行数据时,可以使用预分配。使用预分配时,您可以填充已为数据预留空间的表变量,而不必在每次添加一行时表都随之增长。
T2(1,:) = {75,datetime('now'),"S1"}; T2(2,:) = {68,datetime('now')+1,"S2"}
T2=4×3 table
Temperature Time Station
___________ ____________________ _________
75 19-Aug-2023 13:08:37 "S1"
68 20-Aug-2023 13:08:37 "S2"
0 NaT <missing>
0 NaT <missing>
您可以将一行数据值封装在一个元胞数组中。当您从元胞数组中分配一行时,该元胞数组中的元素将分配到表中的行。
从数组创建一个表。要指定表变量名称,请使用
'VariableNames'
名称-值对组参数。例如,当其他输入参数不是工作区变量时,可以使用
'VariableNames'
指定名称。
T = table(categorical({'M';'F';'M'}),[45;32;34],... {'NY';'CA';'MA'},logical([1;0;0]),... 'VariableNames',{'Gender','Age','State','Vote'})
T=3×4 table
Gender Age State Vote
______ ___ ______ _____
M 45 {'NY'} true
F 32 {'CA'} false
M 34 {'MA'} false
使用州名称作为行名称创建一个表。当使用
table
函数时,您可以同时指定
'VariableNames'
和
'RowNames'
名称-值对组。
T = table(categorical({'M';'F';'M'}),[45;32;34],logical([1;0;0]),... 'VariableNames',{'Gender','Age','Vote'},... 'RowNames',{'NY';'CA';'MA'})
T=3×3 table
Gender Age Vote
______ ___ _____
NY M 45 true
CA F 32 false
MA M 34 false
指定表的行名称。表不必一定有行名称,但如果您指定了行名称,则可以按行名称对表进行索引。您还可以使用表的第一个维度的名称来访问一组行名称。
创建包含患者数据的数组。
LastName = {'Sanchez';'Johnson';'Lee';'Diaz';'Brown'}; Age = [38;43;38;40;49]; Height = [71;69;64;67;64]; Weight = [176;163;131;133;119];
创建包含这些数组的表。指定
LastName
作为该表的行名称的来源。该表只有三个变量。行名称不是表变量,而是表的属性。
T = table(Age,Weight,Height,'RowNames',LastName)
T=5×3 table
Age Weight Height
___ ______ ______
Sanchez 38 176 71
Johnson 43 163 69
Lee 38 131 64
Diaz 40 133 67
Brown 49 119 64
由于行具有行名称,因此可以按名称对
T
的行进行索引。
T('Lee',:)
ans=1×3 table
Age Weight Height
___ ______ ______
Lee 38 131 64
要指定多个行,请使用元胞数组。
T({'Lee','Brown'},:)
ans=2×3 table
Age Weight Height
___ ______ ______
Lee 38 131 64
Brown 49 119 64
要以元胞数组形式访问
T
的所有行名称,请使用
T.Row
语法。默认情况下,
Row
是表的第一个维度的名称。
T.Row
ans = 5x1 cell
{'Sanchez'}
{'Johnson'}
{'Lee' }
{'Diaz' }
{'Brown' }
更改第一个维度的名称。如果更改名称,则可以使用新名称访问行名称。
T.Properties.DimensionNames{1} = 'LastNames';
T.LastNames
ans = 5x1 cell
{'Sanchez'}
{'Johnson'}
{'Lee' }
{'Diaz' }
{'Brown' }
从 R2017a 开始,您可以使用双引号创建字符串,并将字符串数组添加为表变量。
FlightNum = [1261;547;3489]; Customer = ["Jones";"Brown";"Smith"]; Date = datetime(2016,12,20:22)'; Rating = categorical(["Good";"Poor";"Fair"]); Comment = ["Flight left on time, not crowded";... "Late departure, ran out of dinner options";... "Late, but only by half an hour. Otherwise fine."]; T = table(FlightNum,Customer,Date,Rating,Comment)
T=3×5 table
FlightNum Customer Date Rating Comment
_________ ________ ___________ ______ _________________________________________________
1261 "Jones" 20-Dec-2016 Good "Flight left on time, not crowded"
547 "Brown" 21-Dec-2016 Poor "Late departure, ran out of dinner options"
3489 "Smith" 22-Dec-2016 Fair "Late, but only by half an hour. Otherwise fine."
要使用字符串数组中的文本作为行名称,请将字符串数组转换为字符向量元胞数组。然后创建包含行名称的表。
Customer = cellstr(Customer);
T = table(FlightNum,Date,Rating,Comment,'RowNames',Customer)
T=3×4 table
FlightNum Date Rating Comment
_________ ___________ ______ _________________________________________________
Jones 1261 20-Dec-2016 Good "Flight left on time, not crowded"
Brown 547 21-Dec-2016 Poor "Late departure, ran out of dinner options"
Smith 3489 22-Dec-2016 Fair "Late, but only by half an hour. Otherwise fine."
创建工作区变量,其中包含三个地点的不同日期的降雪总量。这些变量都是行向量。
Date = {'12/25/11','1/2/12','1/23/12','2/7/12','2/15/12'}; location1 = [20 5 13 0 17]; location2 = [18 9 21 5 12]; location3 = [26 10 16 3 15];
要用这些变量创建表,一种方法是使用
T = table(Date',location1',location2',location3')
语法调用
table
函数。由于工作区变量是行向量,所以必须经过转置,才能作为列向数据放入表中。因此,输入参数应为表达式,而不是简单的变量。所以,
table
将使用默认变量名称
Var1
、
Var2
、
Var3
和
Var4
来创建
T
。您可以在创建
T
后为
T.Properties.VariableNames
指定更有意义的名称。但是,更方便的方法可能是先创建一个空表,然后使用新名称逐一添加变量。
创建一个空表。转置工作区变量,然后将它们作为列向量添加到表中。在将每个工作区变量分配到
T
中的过程中,为表变量提供一个有意义的名称。
T = table; T.Date = Date'; T.Natick = location1'; T.Boston = location2'; T.Worcester = location3'
T=5×4 table
Date Natick Boston Worcester
____________ ______ ______ _________
{'12/25/11'} 20 18 26
{'1/2/12' } 5 9 10
{'1/23/12' } 13 21 16
{'2/7/12' } 0 5 3
{'2/15/12' } 17 12 15
从 R2019b 开始,您可以指定不是有效的 MATLAB® 标识符的表变量名称。这种变量名称可以包括空格、非 ASCII 字符,并且可以有任何字符作为前导字符。当您访问这样的变量名称时,请用引号引起来。
创建一个表,其中存储关于一组患者的数据。从患者年龄和是否为烟民开始。
Age = [38;43;38;40;49]; Smoker = logical([1;0;1;0;1]); Height = [71;69;64;67;64]; Weight = [176;163;131;133;119]; BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80]; T = table(Age,Smoker)
T=5×2 table
Age Smoker
___ ______
38 true
43 false
38 true
40 false
49 true
添加变量名称为
'29-May-2019 Blood Pressure Reading'
的血压读数。您可以使用圆点语法添加或访问该变量。由于该变量名称不是有效的 MATLAB 标识符,使用圆点语法时需要加上括号和引号。
T.('29-May-2019 Blood Pressure Reading') = BloodPressure
T=5×3 table
Age Smoker 29-May-2019 Blood Pressure Reading
___ ______ __________________________________
38 true 124 93
43 false 109 77
38 true 125 83
40 false 117 75
49 true 122 80
在表变量名称是有效的 MATLAB 标识符时,使用圆点语法时不需要加上括号和引号。
T.Height = Height; T.Weight = Weight
T=5×5 table
Age Smoker 29-May-2019 Blood Pressure Reading Height Weight
___ ______ __________________________________ ______ ______
38 true 124 93 71 176
43 false 109 77 69 163
38 true 125 83 64 131
40 false 117 75 67 133
49 true 122 80 64 119
使用变量名称对
T
进行索引。
T(:,{'Age','Smoker','29-May-2019 Blood Pressure Reading'})
ans=5×3 table
Age Smoker 29-May-2019 Blood Pressure Reading
___ ______ __________________________________
38 true 124 93
43 false 109 77
38 true 125 83
40 false 117 75
49 true 122 80
对下列输入名称使用单引号:
'DimensionNames'
(从 R2021a 开始提供)
'RowNames'
'Size'
'VariableTypes'
'VariableNames'
为了避免与变量输入混淆,请不要对这些名称使用双引号字符串标量(如
"RowNames"
)。
有关接受或返回表的函数列表,请参阅 表 。
此函数支持 tall 数组,但存在以下限制:
语法
TT = table(T1,T2,...)
根据多个 tall 数组
(T1,T2,...)
构造 tall 表。您可以使用
'VariableNames'
名称-值对组参数指定变量名称。
有关详细信息,请参阅 使用 tall 数组处理无法放入内存的数据 。
用法说明和限制:
从 R2019b 开始,您可以在用于代码生成的 MATLAB 代码中使用表。有关详细信息,请参阅 表的代码生成 (MATLAB Coder) 和 Table Limitations for Code Generation (MATLAB Coder) 。
backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™
ThreadPool
加快代码运行速度。
用法说明和限制:
输入数组必须是分布式并且具有相同的行数。
结果为分布式,在第一个维度上使用一维分布方案。
有关详细信息,请参阅 Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox) 。
现在,您可以直接对表和时间表执行计算而无需提取其数据。表和时间表中的所有变量都必须具有支持计算的数据类型。还可以执行其中一个操作数是表或时间表、另一个是数值或逻辑数组的运算。以前,所有计算都要求您通过对表和时间表进行索引来从其中提取数据。
有关详细信息,请参阅 Direct Calculations on Tables and Timetables 和 Rules for Table and Timetable Mathematics 。
使用圆点表示法进行下标索引时,R2022a 的速度明显快于 R2021b。使用多级索引进行下标索引的速度也更快。
例如,当您使用圆点表示法来引用一个包含 10 6 个元素的表变量时,R2022a 的性能比 R2021b 快 4 倍以上。
function timingTest() t = table(zeros(1e6,1), ones(1e6,1), nan(1e6,1)); indices = 1:10000; % Refer to variable using dot notation for i = indices x = t.Var1;
大致的执行时间是:
R2021b: 0.15 秒
R2022a: 0.035 秒
同样,当您使用圆点表示法将一个数组分配给一个包含 10 6 个元素的表变量时,R2022a 的性能比 R2021b 快大约 3.6 倍。
function timingTest() t = table(zeros(1e6,1), ones(1e6,1), nan(1e6,1)); indices = 1:10000; x = randi(1e6,1e6,1); % Assign to variable using dot notation for i = indices t.Var1 = x;
大致的执行时间是:
R2021b: 0.23 秒
R2022a: 0.063 秒
此外,当您使用圆点表示法和圆括号将单个值赋给表变量的元素时,R2022a 的性能比 R2021b 快 4 倍以上。
function timingTest() t = table(zeros(1e6,1), ones(1e6,1), nan(1e6,1)); indices = randi(1e6,1,10000); % Assign to elements using dot notation and parentheses for i = indices t.Var1(i) = rand;
大致的执行时间是:
R2021b: 0.53 秒
R2022a: 0.12 秒
代码是在运行 Windows
®
10 的 Intel
®
Xeon CPU W-2133 @ 3.60 GHz 测试系统上通过调用
timingTest
函数的每个版本进行计时的。
与 R2021a 相比,在 R2021b 中使用花括号进行下标赋值要快得多。
例如,为三个具有 10 6 个元素的表变量赋值时,R2021b 的性能大约快 4.4 倍,如下所示。
function timingTest() t = table(zeros(1e6,1), ones(1e6,1), nan(1e6,1)); indices = randi(1e6,1,10000); % Assign row vector of random values to randomly chosen row for i = indices t{i,:} = rand(1,3);
大致的执行时间是:
R2021a: 7.4 秒
R2021b: 1.7 秒
代码是在运行 Windows 10 系统的 3.6 GHz Intel Xeon W-2133 CPU 上通过调用 R2021a 和 R2021b 中的
timingTest
函数进行计时的。
如果您指定的维度名称与以下保留名称之一匹配,则 MATLAB 会引发错误:
'Properties'
、
'RowNames'
、
'VariableNames'
或
':'
。在以前的版本中,MATLAB 会发出警告并修改维度名称,使其不同于保留名称。
对表变量进行下标赋值明显加快。无论每个表变量中的元素数如何,性能基本上保持恒定。
例如,使用点索引对一个具有 10 6 个元素的变量进行元素赋值时,R2020a 的性能比 R2019b 大约快 2 倍,如下所示。
function timingTest() t = table(zeros(1e6,1)); indices = randi(1e6,1,10000); for i = indices t.Var1(i) = rand;
大致的执行时间是:
R2019b: 1.20 秒
R2020a: 0.59 秒
同样,使用花括号进行赋值更快。当您对具有 10 6 个元素的三个表变量赋值时,R2020a 的性能大约比 R2019b 快 1.2 倍,如下所示。
function timingTest() t = table(zeros(1e6,1), ones(1e6,1), nan(1e6,1)); indices = randi(1e6,1,10000); for i = indices t{i,:} = rand;
大致的执行时间是:
R2019b: 8.04 秒
R2020a: 6.68 秒
代码是在运行 Windows 10 的 Intel Xeon
®
W-2133 @ 3.60 GHz 测试系统上通过调用
timingTest
函数进行计时的。
只有在函数内进行表下标赋值时,性能才会提高。在命令行或者在
try-catch
模块内通过下标对表进行索引时,没有任何改善。
带前导和尾部空白字符的表和时间表变量名称不会被修改。
在以前的版本中,如果您使用
'VariableNames'
名称-值对组参数来指定变量名称或将它们赋给
VariableNames
属性,系统将从变量名称中删除前导和尾部空白字符。
要手动删除此类字符,请首先对名称使用
strtrim
函数,然后将它们作为变量名称赋给表或时间表。
如果指定了与维度名称匹配的表变量名称或与变量名称匹配的维度名称,MATLAB 会报告错误。在以前的版本中,MATLAB 会发出警告并修改名称,以使其唯一。
对大型表变量进行下标赋值明显加快。现在,无论每个表变量中的元素数如何,性能基本上保持恒定。
例如,使用点索引对一个具有 10 6 个元素的变量进行元素赋值时,R2019b 的性能大约快 40 倍,如下所示。
function timingTest() t = table(zeros(1e6,1)); indices = randi(1e6,1,10000); for i = indices t.Var1(i) = rand;
大致的执行时间是:
R2019a: 47.83 秒
R2019b: 1.20 秒
同样,使用花括号进行赋值更快。例如,为三个具有 10 6 个元素的表变量赋值时,R2019b 的性能大约快 18 倍。
function timingTest() t = table(zeros(1e6,1), ones(1e6,1), nan(1e6,1)); indices = randi(1e6,1,10000); for i = indices t{i,:} = rand;
大致的执行时间是:
R2019a: 156.39 秒
R2019b: 8.51 秒
代码是在运行 Windows 10 系统的 3.6 GHz Intel Xeon W-2133 CPU 上通过调用
timingTest
函数的每个版本进行计时的。
表变量越大,性能改善就越明显。但是,只有在函数内进行表下标赋值时,性能才会提高。在命令行中或在 try-catch 代码块内通过下标对表进行索引时,没有任何改善。
readtable
|
cell2table
|
array2table
|
struct2table
|
isvarname
|
summary
|
uitable
|
tall
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
细心的板栗 · 模板处理 · PHPword新版开发指南 · 看云 2 周前 |
留胡子的打火机 · Urbackup Server doesn't start up after updating to 2.5.25 - Server - UrBackup - Discourse 1 周前 |
痴情的雪糕 · DELETE - Apache Doris 1 周前 |
聪明伶俐的跑步鞋 · sfguide-using-snowflake-cortex-and-streamlit-with-geospatial-data/sis001.py at main · Snowflake-Labs 5 天前 |
小胡子的薯片 · 浙大家教中心-家教教师综合搜索平台 1 月前 |