一、MATLAB的数据类型
在MATLAB中 ,数据类型是非常重要的概念,因为它们决定了如何存储和操作数据。MATLAB支持数值型、字符型、字符串型、逻辑型、结构体、单元数组、数组和矩阵等多种数据类型。MATLAB 是一种动态类型语言,这意味着变量的数据类型是在赋值时自动确定的。用户可以直接赋值,MATLAB 会根据所赋的值自动推断变量的类型。MATLAB可以使用 whos 查看变量信息(包括变量的名称、大小、字节数、数据类型等)。
1. 数值型(Numeric Types)
int8, int16, int32, int64: 有符号整数
uint8, uint16, uint32, uint64: 无符号整数
single, double: 浮点数(单精度和双精度)
% 数值型赋值
% 数值型赋值
a = 10; % MATLAB 自动将 a 识别为 double 类型
b = 3.14159; % 同样,b 被识别为 double 类型
c = int8(5); % 可以手动指定类型为 int8
d=single(3.14159)% 可以手动指定类型为 single
whos
2. 字符型(Character Arrays)
用单引号括起来的字符序列,例如 'Alice'
name = 'Alice'; % 字符数组
3. 字符串型(String Arrays)
用双引号括起来的字符串,例如 "Hello, world!"
greeting = "Hello, world!"; % 字符串数组
4. 逻辑型(Logical)
true 或 false
% 逻辑型赋值
isPassed = true; % 逻辑型变量
5. 结构体(Struct)
用于存储不同类型和大小的数据集合
% 结构体赋值
person.name = "Bob";
person.age = 25;
person.height = 180.5;
6. 单元数组(Cell Array)
可以包含不同类型的数据
% 单元数组赋值 cellArray = {'apple', 42, false}; % 可以包含不同类型的数据
7. 数组和矩阵(Arrays and Matrices)
数值型、字符型或其他类型的数据组合
% 数组和矩阵赋值
numbers = [1, 2, 3, 4, 5, 6]; % 行向量
matrix = [1, 2; 3, 4]; % 2x2 矩阵
下面给出一个应用whos查看已创建不同类型的数据变量的实例
% 清除工作区中的所有变量
clear;
% 创建不同类型的变量
numericVar = 42; % 数值型
stringVar = 'Hello, MATLAB!'; % 字符型
logicalVar = true; % 逻辑型
structVar = struct('name', 'John', 'age', 30); % 结构体
cellVar = {'MATLAB', 3.14, true}; % 单元数组
complexVar = 3 + 4i; % 复数型
% 使用 whos 查看变量信息
disp('Variable information using whos:');
whos;
% 若想只查看特定变量的信息,可以传递变量名给 whos
disp('Information for specific variable (numericVar):');
whos numericVar;
% 若想查看变量的详细信息,可以使用 whos 的输出形式
varInfo = whos;
% 显示变量的数据类型
disp('Variable names and their types:');
for i = 1:length(varInfo)
fprintf('%s: %s\n', varInfo(i).name, varInfo(i).class);
end
二、MATLAB不同数据类型转换实例
% MATLAB 数据类型转换示例
% 数值类型赋值
a = 10; % double 类型
b = int8(5); % int8 类型
c = 3.14; % double 类型
d = single(2.718); % single 类型
% 复数赋值
z = 1 + 2i;
% 字符和字符串赋值
charArray = 'hello';
stringArray = "world";
% 逻辑类型赋值
isTrue = true;
isFalse = false;
% 结构体赋值
person.name = "Alice";
person.age = 30;
person.isStudent = false;
% 单元数组赋值
cellArray = {charArray, stringArray, isTrue, person};
% 数组和矩阵赋值
matrix = [1, 2, 3; 4, 5, 6];
% 数值类型转换
a_int8 = int8(a); % 将 double 转换为 int8
b_double = double(b); % 将 int8 转换为 double
c_single = single(c); % 将 double 转换为 single
d_double = double(d); % 将 single 转换为 double
% 复数到实数的转换
z_real = real(z); % 提取实部
z_imag = imag(z); % 提取虚部
% 字符和字符串转换
charFromString = char(stringArray); % 将字符串转换为字符数组
stringFromChar = string(charArray); % 将字符数组转换为字符串
% 逻辑类型到数值的转换
isTrue_numeric = double(isTrue); % 将逻辑值转换为数值(1 或 0)
isFalse_numeric = double(isFalse);
% 结构体到单元数组的转换
personCell = struct2cell(person); % 将结构体转换为单元数组
% 单元数组到结构体的转换(假设单元数组格式正确)
newPerson = cell2struct(personCell, fieldnames(person));
% 数组和矩阵转换
matrix_single = single(matrix); % 将 double 矩阵转换为 single 矩阵
matrix_int8 = int8(matrix); % 将 double 矩阵转换为 int8 矩阵(可能会丢失精度)
% 显示转换结果
disp('Converted Values:');
disp(['a_int8: ', num2str(a_int8)]);
disp(['b_double: ', num2str(b_double)]);
disp(['c_single: ', num2str(c_single)]);
disp(['d_double: ', num2str(d_double)]);
disp(['z_real: ', num2str(z_real)]);
disp(['z_imag: ', num2str(z_imag)]);
disp(['charFromString: ', charFromString]);
disp(['stringFromChar: ', stringFromChar]);
disp(['isTrue_numeric: ', num2str(isTrue_numeric)]);
disp(['isFalse_numeric: ', num2str(isFalse_numeric)]);
disp('personCell:');
disp(personCell);
disp('newPerson:');
disp(newPerson);
disp('matrix_single:');
disp(matrix_single);
disp('matrix_int8:');
disp(matrix_int8);