更好的MATLAB代码, 你不知道的(2)

更好的MATLAB代码, 你不知道的(2)

1.bsxfun

对两个数组应用按元素运算启用隐式扩展
优点:

  • bsxfun隐式地处理数组的复制,从而避免内存分配
  • bsxfun支持多线程
C = bsxfun(fun, A, B)

2.使用Profiler

Profiler用来帮助分析程序

profile on  %开启Profiler
profile clear %清楚Profiler状态
% 程序
profile report %查看Profiler结果
profile off %关闭Profiler

3.预先分配内存

n = 1000
% 什么都不写 good
% y = zeros(n, n); better
% y(n, n) = 0; best
tic;
for i = 1:n
    for j = 1:n
        y(i, j) = exp(i + j);
    end
end
t = toc;

4.向量化或矩阵化

MATLAB在矩阵运算上很快很快,向量是 1 × n 1 \times n 1×n n × 1 n \times 1 n×1维矩阵
优点:

  • 向量化的代码更短
  • 更少的程序错误
  • 运行地更快
tic;
%% 例子1 good
y(n, n) = 0;
for i = 1:n
    for j = 1:n
        y(i, j) = exp(i + j);
    end
end
%% 例子2 better
[I, J] = meshgrid(1:n, 1:n);
IJ = I + J;
Y = exp(IJ);
t = toc;

5.解 A x = b Ax=b Ax=b

x = inv(A) * b; % good
x = A\b; % better

6.善用稀疏矩阵

7.原地计算

y = x.*x % good
x = x.*x % better

8.正确的数据类型

img_CannyEdge = edge(img_Double, 'canny') % good
img_CannyEdge = edge(img_Uint8, 'canny') % better

9.MATLAB主要按列来组织数据

n = 1000;
A = randn(n, n);
tic;
for i = 1:n
    A(i, :) = 0; % 行先 good
    A(:, j) = 0; % 列先 better
end
t = toc;

10.复制和写

tic;
%% good
B = A;
B(1, 1, 1) = 0;
%% better
A(1, 1, 1) = 0;
B =A;
t = toc;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值