matlab逻辑数组怎么用?请看下面的程序段。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab逻辑数组怎么用?请看下面的程序段。相关的知识,希望对你有一定的参考价值。
%perform calculation using loops and branches
maxcount=100;
tic;
for jj=1:maxcount
a=1:10000;
for ii=1:10000
if a(ii)>5000
a(ii)=sqrt(a(ii));
end
end
end
average1=(toc)/maxcount;
%perform calculation using logical arrays
maxcount=100;
tic;
for jj=1:maxcount
a=1:10000;
b=a>5000;
a(b)=sqrt(a(b));%请仔细阅读这个语句,并解释其作用。
end
average2=(toc)/maxcount;
%display result
fprintf('loop/if approach=%8.4f\n',average1);
fprintf('logical array approach=%8.4f\n',average2);
以上的程序段为了计算1到10000中大于5000的算数跟,并计算2种方法所消耗的时间。
请教高手a(b)=sqrt(a(b))这句话是什么意思,具体如何解释?
另一种使用逻辑数组选取,很多人都不知道这种方法。
这种方法要求数组和逻辑数组的元素个数相等,比如a是数组,n是逻辑数组,则a(n)就是取a中与n为真的元素相对应的元素。比如a([1 0 1 1 0])就是取a的第1、3、4个元素,和a([1 3 4])等价。
这种方法对于删选数据非常有效,比如要选择a中大于5的元素,很多人都必须调用find函数,但其实直接用a(a>5)即可,运算速度也比调用find函数要快得多。
回到你的程序中,因为b=a>5000,因此a(b)就是选择a中所有大于5000的元素,于是a(b)=sqrt(a(b))就是将a中所有大于5000的元素开平方。 参考技术A 你的数组太大了。
你可以看一下:
a=1:10;
b=a>5;
a(b)=sqrt(a(b));
得到的结果是1到5,然后就是sqrt(6:10)
b是一个逻辑数组。0,0,0,0,0,1,1,1,1,1
如果为零的话,就不参与计算。
这样理解就可以了。
matlab用fread读音频文件
这个程序是心理声学模型1对音频文件分段计算掩蔽阈值的程序,这里是读取音频文件的一段程序,有些不太理解,希望有专业人士帮忙解答下,感激不尽!
faudin = fopen('E:\MATLAB\mywork\yang\mingyun.wav','rb');
x=fread(faudin, 44,'char');
fseek(faudin,100*1024,'bof');
%%%%%%%%%%%读一帧音频%%%%%%%%%%%%%%%%
x=fread(faudin,LENGTH,'int16') ; %列矢量
......
最后一行为什么要用int16?这跟音频文件的存储方式有关还是什么,还有为什么要用fread不直接用wavread呢?请教
最后一行中读入x中的只读了长为LENGTH的数据;如果用wavread是全部读取wav的所有数据。如果要进行分帧处理,还是逐段读入会更好一点。 参考技术A 撒旦的的点点滴滴滴滴滴滴滴滴追问
坑爹
本回答被提问者采纳以上是关于matlab逻辑数组怎么用?请看下面的程序段。的主要内容,如果未能解决你的问题,请参考以下文章