數組添加新元素, 類似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這方面還是要嚴格要求自己的, 算法效率盡量在初步寫成的時候就考慮優化, 至少要把可以改進的優化點記下, 不然最后都拋之腦后, 傻等電腦慢跑.