MATLAB的数据类型和各类数据类型转化示例

一、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!"; % 字符串数组

由上面可知,对简单文本而言,字符串型数据比字符型数据要占用的存储空间大很多。

字符数组每个字符占2字节,没有额外开销,适合存储单一文本或固定长度的多行文本。 字符串数组每个元素是一个字符串,可能有较大的固定开销,适合存储不同长度的文本,尤其是当各文本长度差异较大时,避免填充空格。

因此,使用时应根据需要选择:若文本长度相同或相近,优先使用字符数组以节省空间;若长度差异大或需要灵活操作,使用字符串数组。

4. 逻辑型(Logical)

true 或 false

% 逻辑型赋值

isPassed = true; % 逻辑型变量

5. 结构体(Struct)

用于存储不同类型和大小的数据集合

% 结构体赋值

person.name = "John";

person.age=25;

person.height = 180.5;

6. 单元数组(Cell Array)

可以包含不同类型的数据

% 单元数组赋值

cellArray = {'apple', 42, false,3.14,true,"Hello, world!"}; % 可以包含不同类型的数据

7. 数组和矩阵(Arrays and Matrices)

数值型、字符型或其他类型的数据组合

% 数组和矩阵赋值

numbers = [1, 2, 3, 4, 5, 6]; % 行向量

matrix = [1, 2, 3; 4, 5, 6]; % 2x3 矩阵

下面给出一个应用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);

如果大家觉得本文对大家学习和研究有所帮助,请点赞、关注,欢迎转发!谢谢大家!

相关推荐
Hello.Reader1 小时前
深入浅出 Rust 的强大 match 表达式
开发语言·后端·rust
独正己身3 小时前
代码随想录day4
数据结构·c++·算法
来恩10036 小时前
C# 类与对象详解
开发语言·c#
komo莫莫da7 小时前
寒假刷题Day19
java·开发语言
Rachela_z7 小时前
代码随想录算法训练营第十四天| 二叉树2
数据结构·算法
细嗅蔷薇@7 小时前
迪杰斯特拉(Dijkstra)算法
数据结构·算法
ElseWhereR7 小时前
C++ 写一个简单的加减法计算器
开发语言·c++·算法
S-X-S7 小时前
算法总结-数组/字符串
java·数据结构·算法