MATLAB数组类型全解析:从基础到高级应用
立即解锁
发布时间: 2025-09-06 01:47:38 阅读量: 9 订阅数: 38 AIGC 


MATLAB工程应用精要
### MATLAB 数组类型全解析:从基础到高级应用
#### 一、数组单位与用途
在 MATLAB 中,当改变单位后查看结果,会发现无论以字符元胞数组还是字符串数组输入单位,结果都会以元胞数组形式存储(截至 2021 年是这样,未来可能改变)。其他属性也能以相同方式更改。这些单位可用于确认计算中的维度一致性,作为图表标签的输入,或用于实际的符号计算,其最重要的用途或许是简单的文档记录。
#### 二、时间表数组
MATLAB 包含一种特殊的数组类型——时间表数组,用于处理带时间戳的数据。常规表格的所有功能都适用于时间表数组,此外还有允许用户操作数据的函数。
以 MATLAB 自带的两个数据集 `indoors` 和 `outdoors` 为例:
- `indoors` 数据存储为 `.csv` 文件,使用以下命令将其作为时间表加载到工作区:
```matlab
indoors = readtimetable('indoors.csv');
```
- `outdoors` 数据存储在 `.mat` 文件中,使用以下命令加载:
```matlab
load outdoors;
```
使用 `summary` 函数查看数组内容摘要,如:
```matlab
summary(indoors)
summary(outdoors)
```
虽然这两个数组的数据覆盖大致相同的时间段,但行数不同,且数据采集时间不完全一致。可以分别绘制每个数据集的图形,也可将数据分层绘制在一个图形中,但如果能合并两个数据集并在等效时间估计数据值会更有益。
#### 三、同步时间表
要将两个数据集合并为一个文件,可使用 `synchronize` 函数:
```matlab
combined_data=synchronize(indoors,outdoors)
```
使用 `size` 函数确定结果数组的维度,使用 `summary` 函数了解两个数组的合并方式:
```matlab
size(combined_data)
summary(combined_data)
```
合并后的数组可能存在缺失值,用 `NaN` 表示。为了填充缺失信息,可使用线性插值:
```matlab
combined_data_linear = synchronize(indoors,outdoors,'union','linear');
```
合并后的数组时间间隔可能不规则,可使用 `retime` 函数创建均匀间隔的数据。例如,使用三次样条估计技术按小时创建值:
```matlab
regular_spacing=retime(combined_data_linear,'hourly','spline');
```
#### 四、MATLAB 数组类型概述
MATLAB 的主要数据结构是数组,可存储多种不同类型的数据。默认的数值数据类型是双精度浮点数(通常称为 `double`),还支持单精度浮点数以及八种不同类型的整数。文本信息可存储在字符数组(单个字符)或字符串数组(字符序列)中。此外,MATLAB 还包含多种其他数据类型,如符号、日期时间、逻辑和分类数组。
所有这些数据类型都可存储为二维数组,标量和向量数据实际上也是二维数组,只是只有一行或一列。MATLAB 还允许用户存储多维数组,三维或更高维数组的每个二维切片称为一个页面。
一般来说,MATLAB 数组中存储的所有数据必须是相同类型。如果混合字符和数值数据,数值数据会根据其 ASCII 等效十进制值转换为字符数据。当对混合的字符和数值数据进行计算时,字符数据会转换为其 ASCII 等效值。
MATLAB 提供三种可同时存储多种类型数据的数组类型:表数组、元胞数组和结构体数组。元胞数组使用花括号 `{ }` 作为数组构造器,结构体数组依赖命名字段。表数组特别适用于表格数据,如电子表格中存储的数据。时间表数组是一种特殊的表,用于处理包含时间戳行的数组,表数组正逐渐成为 MATLAB 中存储多种类型数据的主要数组类型。
#### 五、MATLAB 特殊字符、命令和函数总结
| 特殊字符/命令/函数 | 描述 |
| ---- | ---- |
| `{ }` | 元胞数组构造器 |
| `' '` | 字符信息 |
| `" "` | 字符串信息 |
| `cell2table` | 将元胞数组转换为表数组 |
| `celldisp` | 显示元胞数组的内容 |
| `char` | 创建填充字符数组 |
| `cumsum` | 计算数组元素的累积和 |
| `categories` | 确定分类数组中的可用类别 |
| `categorical` | 创建分类数组 |
| `datetime` | 创建日期时间数组 |
| `double` | 将数组转换为双精度数组 |
| `duration` | 创建持续时间数组 |
| `eye` | 创建单位矩阵 |
| `format rat` | 将显示格式转换为有理数(分数) |
| `int16` | 16 位有符号整数 |
| `int32` | 32 位有符号整数 |
| `int64` | 64 位有符号整数 |
| `int8` | 8 位有符号整数 |
| `intmax` | 确定 MATLAB 中可存储的最大整数 |
| `intmin` | 确定 MATLAB 中可存储的最小整数 |
| `num2str` | 将数值数组转换为字符数组 |
| `realmax` | 确定 MATLAB 中可表示的最大实数 |
| `realmin` | 确定 MATLAB 中可表示的最小实数 |
| `readtable` | 从多种格式导入矩形数据文件的内容 |
| `readtimetable` | 将数据文件的内容作为时间表导入 |
| `retime` | 根据指定策略均匀分布时间表中的值 |
| `single` | 将数组转换为单精度数组 |
| `summary` | 列出表数组中的变量及其内容摘要 |
| `sparse` | 将全格式数组转换为稀疏格式数组 |
| `squeeze` | 从多维数组中移除单例维度 |
| `str2num` | 将字符数组转换为数值数组 |
| `string` | 创建字符串数组 |
| `struct2table` | 将结构体数组转换为表数组 |
| `synchronize` | 将时间表合并为一个数组 |
| `table` | 创建表数组 |
| `table2cell` | 将表数组转换为元胞数组 |
| `table2struct` | 将表数组转换为结构体数组 |
| `uiimport` | 打开文件导入向导 |
| `uint16` | 16 位无符号整数 |
| `uint32` | 32 位无符号整数 |
| `uint64` | 64 位无符号整数 |
| `uint8` | 8 位无符号整数 |
#### 六、问题与实践
以下是一些相关问题及实践操作:
1. **数值数据类型问题**
- 计算调和级数前 1000 万项的和(不是部分和),分别使用双精度和单精度数,比较结果并解释差异。
- 定义一个包含前 10 个整数的 `int8` 类型数组,使用这些整数计算调和级数的前 10 项,并解释结果。
- 解释为什么在大多数工程计算中,让 MATLAB 默认使用双精度浮点数表示比指定单精度和整数类型更好。
- 定义两个变量:单精度和双精度复数,将它们分别提升到 100 次幂,解释答案的差异。
2. **字符和字符串数据问题**
- 使用互联网搜索引擎查找 ASCII 和 EBCDIC 中字符的二进制等效列表,简要概述两种编码方案的差异。
- 使用 MATLAB 将数字 85 表示为字符数组,回答数组元素数量、字符 8 和 5 的数值等效值。
- 创建一个包含五个不同名称的填充字符数组,创建一个二维数值数组表示每个人的生日,使用 `num2str` 函数将生日转换为字符数组,使用 `disp` 函数显示名称和生日表,创建一个日期时间数组表示生日。
- 重复上述问题,使用字符串数组代替填充字符数组,使用 `fprintf` 显示名称和生日表。
3. **热电偶数据处理问题**
- 编写一个程序,加载 `thermocouple.dat` 文件到 MATLAB,确定文件的大小(行数和列数),提取每个热电偶数据集并存储到单独的文件中,文件名分别为 `thermocouple1.mat`、`thermocouple2.mat` 等。程序应能接受任意大小的二维文件。
4. **多维数组问题**
- 创建三个二维数组 `A`、`B`、`C`,将它们合并为一个 2×2×3 的多维数组 `ABC`,提取每列第 1 个元素组成一个 2×3 数组 `Column_A1B1C1`,提取每行第 2 个元素组成一个 3×2 数组 `Row_A2B2C2`,提取第 1 行、第 2 列、第 3 页的值。
- 假设有一位大学教授每年都会进行一次测试,将每年的测试数据存储在二维数组中。创建第一年和第二年的二维数组 `year1` 和 `year2`,将它们合并为一个具有两页的三维数组 `testdata`。使用三维数组进行以下计算:计算每年每个问题的平均分数并存储在二维数组中,计算所有数据中每个问题的平均分数,提取每年问题 3 的数据并创
0
0
复制全文
相关推荐

