zoukankan      html  css  js  c++  java
  • MATLAB小技巧

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

  • 相关阅读:
    增量学习中的自我训练
    半监督学习和直推学习的区别
    LeetCode: Word Break
    LeetCode: Linked List Cycle
    LeetCode: Reorder List
    LeetCode: Binary Tree Traversal
    LeetCode: LRU Cache
    LeetCode: Insertion Sort List
    LeetCode: Sort List
    LeetCode: Max Points on a Line
  • 原文地址:https://www.cnblogs.com/ZhengPeng7/p/7260075.html
Copyright © 2011-2022 走看看