MATLAB加快程序运行的方法:逻辑数组与向量化

本文介绍了MATLAB中向量化的基本概念及其优势,并对比了向量化与for循环的性能差异。同时,文章还详细解释了如何使用逻辑数组来提高代码效率。

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

一、向量化的介绍

用for循环和向量计算是非常常见的。例如,下面的代码片段用for循环计算1到100之间的所有整数的平方,平方根,立方根。

for ii=1:100
    square(ii)=ii^2;
    square_root(ii)=ii^(1/2);
    cube_root(ii)=ii^(1/3);
end

下面是用向量计算上面的问题:

ii=1:100;
squre=ii.^2;
squre_root=ii.^(1/2);
cube_root=ii>^(1/3);

尽管两种算法得到了相同的结果,但for循环算法比向量算法慢15倍还多。这是由于MATLAB通过每一次循环时,每行都要翻译执行一次。for循环的实现相当于MATLAB执行了300行代码。相反,如果用向量算法,MATLAB只需要翻译执行4行代码。所以用向量语句它的执行速度非常快。

向量算法的缺点是需要很大的内存,因为一些间接的数组需要创建。MATLAB中,用向量算法代替循环的算法的过程称之为向量化。而向量化能改进许多的MATLAB程序。

在循环执行开始之前,预先分配一个数组,这样也能大大增加循环运行的速度。

二、逻辑数组的运用

逻辑数据类型在MATLAB中并不真实存在。其实,它是带特定的逻辑属性的标准数字型数据类型。逻辑型数组通过所有的关系运算符和逻辑运算符创建。它们区别于数字型是在调用whos命令时,(logical)会出现在类型的后面。

逻辑数组有一个很重要的属性——它在算术运算中能提供一个屏蔽(mask)。屏蔽(mask)是指一个数组,他从另一个数组选择所需的元素参与运算。指定的运算只在选择的元素上执行而不执行任何操作在没有被选中的元素上(即这些元素保持不变)。

例如:

for ii = 1:size(a,1)
    for jj = 1:size(a,2)
        if a(ii,jj) > 5
            a(ii,jj) = sqrt(a(ii,jj));
        else
            a(ii,jj) = a(ii,jj)^2;
        end
    end
end

用逻辑数组运算的代码如下:

b = a > 5
a(b) = sqrt(a(b));
a(~b) = a(~b) .^2;

用逻辑数组运算的速度比未用的快的多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值