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([1 3 4])。
另一种使用逻辑数组选取,很多人都不知道这种方法。
这种方法要求数组和逻辑数组的元素个数相等,比如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呢?请教

用int16是16 位,整型数,同数据存储的方式有关;
最后一行中读入x中的只读了长为LENGTH的数据;如果用wavread是全部读取wav的所有数据。如果要进行分帧处理,还是逐段读入会更好一点。
参考技术A 撒旦的的点点滴滴滴滴滴滴滴滴追问

坑爹

本回答被提问者采纳

以上是关于matlab逻辑数组怎么用?请看下面的程序段。的主要内容,如果未能解决你的问题,请参考以下文章

C++ 指针 vs 数组

matlab中怎么在数组找一个元素

matlab怎样按列读取txt中的数据到数组啊

求一个PHP计算数组内元素的不同组合,请看案例

如何用matlab编写矩阵运算程序?

matlab中为啥用unique数组去掉重复元素后,还有相同的元素