数组添加新元素, 类似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这方面还是要严格要求自己的, 算法效率尽量在初步写成的时候就考虑优化, 至少要把可以改进的优化点记下, 不然最后都抛之脑后, 傻等电脑慢跑.