MATLAB小技巧

时间:2024-02-29 20:25:46

数组添加新元素, 类似python的append

A = ones(1, 3);
B = 3;
A = [A, B];    % 注意 A, B之间的维度关系

将一个数组的元素打乱

a = a(randperm(length(a)));

MATLAB查找数组最小的n个数的原下标

A = rand(1, 10);        % 示例A
[vle, idx] = sort(A);    % sort和max一样, 返回[值, 索引].
n = 4;
res = idx(1:n);

保留n位小数

1.结尾为0, 如:

roundn(12.3456, -2)    %   负整数, 截于小数点后2位12.3500
roundn(12.3456, 1)    %    正整数, 于小数点前1位截, 结果: 10

2.结尾无数, 如:

n = 4;
vpa(123.45, n)        % 保留n位小数, 结果: 123.4

MATLAB使用不当时的一大耗时点

MATLAB之前经常给出波浪线提示"变量XX可能会随迭代次数而改变。请预分配内存以获得更高的运算速度", 常常不以为意, 今天吃大亏了, 10个小时处理了40张图。。。

一个例子

random_points = rand(50000, 2);
%% C语言式->_->
tic
t_cell = cell(size(random_points, 1), 1);
for i = 1 : size(random_points, 1)
    t_cell{i} = {random_points(i, :)};
end
toc
% 时间已过 0.156488 秒。

%% Python式<-_<-
tic
t_cell = {};
for i = 1 : size(random_points, 1)
    t_cell = [t_cell; random_points(i, :)];
end
toc
% 时间已过 33.253046 秒。

耗时大相径庭, 效率可见一斑.
尽管人生苦短我用Python, 但以后在MATLAB这方面还是要严格要求自己的, 算法效率尽量在初步写成的时候就考虑优化, 至少要把可以改进的优化点记下, 不然最后都抛之脑后, 傻等电脑慢跑.