MATLAB 有什么奇技淫巧?

这篇文章揭示了MATLAB中的一些隐藏技巧,包括使用sprintfc生成cellstr,strfind查找子串位置,通过cell和函数句柄实现类似函数式编程的操作,以及利用regexprep的动态表达式等。文中还提到了MATLAB图形对象的隐藏属性,运算符重载,以及如何加速数组运算和卷积。此外,还介绍了如何在MATLAB中利用Java和Python扩展功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文作者Falccm,已授权优快云转载 。 责编:王艺
投稿请联系:wangyi@youkuaiyun.com

从事AI领域的您一定是MATLAB的老朋友了,本文列举了在使用MATLAB过程中一些隐藏的有趣技巧,希望对您有所帮助。

注:以下所有例子如无特殊说明都是在 2016a 上执行,其他版本或有差异,建议自行测试

1. 可以用 sprintfc 生成 cellstr:

>> a = magic(3);
>> b = sprintfc('%d',a)
b = 
    '8'    '1'    '6'
    '3'    '5'    '7'
    '4'    '9'    '2'

2. strfind 可以作用于数值数组用于查找子串的位置:

>> k = strfind([2 7 1 3 0 7 1],[7 1])
k =
     2     6

3. 可以用 cell 和 函数句柄实现类似于函数式编程的操作,以 fibonacci 数列为例:

>> f = {@(f,n)1 @(f,n)f{(n>3)+1}(f,n-1) + f{(n>4)+1}(f,n-2)};
>> fib = @(n)f{(n>2)+1}(f,n);
>> fib(20)
ans =
        6765

类似的,构建 if 函数:

>> iff = @(varargin)varargin{find([varargin{1:2:end}],1)*2};
>> x = 3;
>> iff(x<1,1,x<2,2,x<3,3,x<4,4,x<5,5)
ans =
     4

4. regexprep 当替换字符串为 ${cmd} 动态表达式时 cmd 可以访问调用时的 caller 工作区:

% haha.m
function x = haha
  x = str2double(regexprep('1','1','${num2str(y,16)}'));  
% command window/命令窗口
>> y = pi;
>> haha                  % 注意此处调用 haha 函数时并未传入 y 的值
ans =
          3.14159265358979

5. 在 2015b 或 2016a 可以启用被隐藏的单一维度拓展:

>> builtin('_useSingletonExpansion',1);
>> (1:3)'+(1:3)          % 相当于 bsxfun(@plus, (1:3)', 1:3) 
ans =
     2     3     4
     3     4     5
     4     5     6
>> (1:3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值