Matlab-技巧积累

从 Map 中找到 value 最大元素的 key

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
% 创建一个 Map 对象
myMap = containers.Map({'a', 'b', 'c', 'd'}, [10, 20, 15, 25]);

% 获取所有值
values = myMap.values();

% 将值转换为数组
valuesArray = cell2mat(values);

% 找到最大值的索引
[~, maxIndex] = max(valuesArray);

% 找到对应的键
keys = myMap.keys();
maxKey = keys{maxIndex};

% 显示结果
disp(['最大值的键是: ', maxKey]);
disp(['最大值是: ', num2str(valuesArray(maxIndex))]);

将字符串大写

1
2
3
4
5
6
7
8
% 定义一个字符数组
lowercaseStr = 'hello world';

% 转换为大写
uppercaseStr = upper(lowercaseStr);

% 显示结果
disp(uppercaseStr); % 输出: HELLO WORLD

花括号和方括号

花括号 {} 表示元胞数组 (Cell Array), 可以存储不同类型的数据, 例如字符串, 数字, 结构体等, 如:

1
keys = {'x', 'y', 'z'};  % 创建一个元胞数组,元素可以是字符串

而方括号 [] 用于创建常规数组, 例如数值数组, 字符数组或逻辑数组. 所有元素必须是相同类型. 如:

1
values = [10, 20, 30];  % 创建一个数值数组

定义键值对

containers.Map 来创建, 需要分别指定键和值的类型.

创建键值对

1
2
3
4
5
6
7
8
9
10
% 创建一个 Map 对象
myMap = containers.Map('KeyType', 'char', 'ValueType', 'double');

% 添加键值对
myMap('a') = 1;
myMap('b') = 2;
myMap('c') = 3;

% 显示 Map 内容
disp(myMap);

访问值

1
2
valueA = myMap('a');
disp(['Value for key "a": ', num2str(valueA)]); % 输出: Value for key "a": 1

检查键是否存在

1
2
3
4
5
if isKey(myMap, 'b')
disp('Key "b" exists.');
else
disp('Key "b" does not exist.');
end

删除键值对

1
2
remove(myMap, 'b');  % 删除键 "b"
disp(myMap); % 显示更新后的 Map

创建多个键值对

1
2
3
4
5
keys = {'x', 'y', 'z'};
values = [10, 20, 30];

myMap = containers.Map(keys, values); % 创建 Map
disp(myMap);

函数定义

示例:

1
2
3
4
function result = addNumbers(a, b)
% 计算两个数的和
result = a + b;
end

注意, 在 MATLAB 中, 如果你在一个文件中定义了一个函数, 那么该文件只能包含该函数的定义, 或者在该函数后定义其他函数. 而主脚本代码 (如调用函数和显示结果的代码) 应该放在另一个文件中, 或者在命令行中执行.

双引号和单引号的区别

  • 用双引号定义字符串时, 默认创建的是字符串数组
  • 用单引号定义字符串时, 才是字符数组

示例:

1
2
3
4
5
6
7
8
9
% 使用单引号创建字符数组
charArray = 'hello'; % 字符数组
disp(charArray); % 输出: hello
disp(class(charArray)); % 输出: char

% 使用双引号创建字符串数组
stringArray = "hello"; % 字符串数组
disp(stringArray); % 输出: "hello"
disp(class(stringArray)); % 输出: string

另一个验证区别的方式:

1
2
3
4
5
6
str = "Hello, World!";

for i = 1:length(str)
char = str(i);
disp(['字符 ', num2str(i), ': ', char]);
end

只输出一次, 因为字符串数组中只有一个元素.

而:

1
2
3
4
5
6
7
8
% 定义字符数组
charArray = 'Hello, World!';

% 遍历字符数组中的所有字符
for i = 1:length(charArray)
char = charArray(i); % 获取当前字符
disp(['字符 ', num2str(i), ': ', char]);
end

输出每个字符.

退出 matlab, 打开 workspace

在命令行输入:

1
>>> quit

可以关闭 matlab.

输入:

1
>>> workspace

可以打开 workspace.

同时为多个变量赋值

需要配合 deal() 函数使用, 如:

1
[a, b, c] = deal(1, 2, 3);

会分别将 1, 2, 3 赋值给变量 a, b, c.

访问数组的元素

f5001x1double 类型的数组, 取其第一个元素:

1
f(1)

遍历数组:

1
2
3
4
A = [1, 2, 3, 4, 5];
for i = 1:length(A)
disp(A(i));
end

获取变量类型, 大小和长度

class() 函数获取类型, 用 size() 函数获取大小, 用 length() 函数获取长度:

1
2
3
4
A = [1 2 3 4 5 6 7];
sz = size(A);
cls = class(A);
len = length(A);

sz 的值为 1x7.

cls 的值为 double.

len 的值为 7.

创建, 访问和操作单元数组 (cell array)

在 MATLAB 中, 单元数组是一种特殊的数组, 可以容纳不同类型的数据, 每个元素可以是任意类型的数据, 包括数组, 结构体, 函数句柄等.

示例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
% 创建一个包含不同类型数据的单元数组
myCellArray = {1, 'hello', [2 3 4], magic(3)}; % 创建一个 1x4 的单元数组
myCellArray2 = {1, 2, 3; 'a', 'b', 'c'}; % 创建一个 2x3 的单元数组
% 访问单元数组中的元素
element1 = myCellArray{1}; % 获取第一个元素
element2 = myCellArray{2}; % 获取第二个元素
element3 = myCellArray{1,2}; % 获取第一行第二列的元素

% 向单元数组中添加元素
myCellArray{5} = rand(2, 2); % 在第五个位置添加一个随机矩阵
% 使用单元数组进行迭代
for i = 1:length(myCellArray)
disp(myCellArray{i}); % 显示每个元素
end

运行指定脚本

在命令窗口输入文件名并回车即可.

载入 .mat 文件

.mat 文件是 MATLAB 中用来保存变量和数据的文件格式的扩展名.

可以用 load 函数加载:

1
load('test.mat')

清除 workspace

clear 指令清除 workspace 中的所有变量.

clear x 清除指定变量.

将图像保存为 PNG

参考

1
saveas(gcf, 'figure.png', 'png');

指数拟合

cftool 命令.


Matlab-技巧积累
http://example.com/2022/10/28/Matlab-技巧积累/
作者
Jie
发布于
2022年10月28日
许可协议