Matlab中cellfun的速度优化

在做实验中需要用到matlab的cellfun,但是使用后速度巨慢无比,原因就在于cellfun中的函数上。注意,matlab最擅长的是矩阵运算,是矩阵运算,是矩阵运算!重要的事情说三遍!尽量把嵌套在cellfun中的函数表达能矩阵运算的形式,速度上会有显著提升!例如,我需要对每个cell表格中的8个二值向量转化为十进制的数,原始的代码为:

vertical_diff_feature=cellfun(@FeatureEncoding,vertical_diff_cell);

function feature_value = FeatureEncoding(number_vector)
[m,n]=size(number_vector);
if m>n
    number_vector=number_vector';
end
feature_value=bin2dec(num2str(number_vector))/255;
end

注意,这里用到了bin2dec ,num2str两个函数,这是导致运算缓慢的罪魁祸首!一定要改成矩阵运算的形式,例如:

B=2.^[7:-1:0]*A

速度一下子就上来了!

`cellfun` 函数是 MATLAB 一种非常有用的函数,它可以对 cell 数组进行逐个元素的操作。`cellfun` 函数对每一个 cell 数组元素应用一个特定的函数,然后将每个函数的结果合并为一个数组。 `cellfun` 函数的语法如下: ``` B = cellfun(fun,A) B = cellfun(fun,A,'UniformOutput',false) B = cellfun(fun,A1,...,An) B = cellfun(fun,A1,...,An,'UniformOutput',false) ``` 其 `fun` 是要应用于每个元素的函数句柄或函数名称。`A` 是要处理的 cell 数组。`B` 是处理结果的数组。如果 `UniformOutput` 参数设置为 `true`(默认值),则 `B` 是一个标量或数组,其每个元素都是 `fun` 函数的结果。如果 `UniformOutput` 参数设置为 `false`,则 `B` 是一个 cell 数组,其每个元素都是 `fun` 函数的结果。 下面是一个简单的例子,演示了如何使用 `cellfun` 函数将一个 cell 数组的每个字符串都转换为大写: ```matlab % 创建一个 cell 数组 strs = {'hello', 'world', 'from', 'matlab'}; % 使用 cellfun 函数将每个字符串转换为大写 upper_strs = cellfun(@upper, strs, 'UniformOutput', false); % 显示结果 disp(upper_strs); ``` 该代码将输出以下内容: ``` 'HELLO' 'WORLD' 'FROM' 'MATLAB' ``` 在上面的代码,`@upper` 是一个函数句柄,表示将每个字符串转换为大写。`UniformOutput` 参数设置为 `false`,因此 `upper_strs` 是一个 cell 数组,其每个元素都是一个字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值