huaijuliu 发表于 2011-3-11 18:16

请教有关for循环改变为向量化运算

采用向量化运算可以大大提高运算速度,请问大家对于下面这个function 如何改变成向量化运算呢
请大家赐教

function a=half(k)
a=zeros(1,k);
a(1)=64;
for i=2:k
   a(i)=2*a(i-1);
end

TNC 发表于 2011-3-11 23:47

不是任何问题都可以用向量化运算解决的,否则估计matlab就会取消循环运算了

huaijuliu 发表于 2011-3-12 00:44

我觉得可以用filter函数实现 等我实现了上传请大家指正

ChaChing 发表于 2011-3-12 01:02

回复 1 # huaijuliu 的帖子

function a=half(k)
aa=0:k-1; a=64*(2.^aa);

huaijuliu 发表于 2011-3-12 01:05

本帖最后由 huaijuliu 于 2011-3-12 01:08 编辑

filter(,1,32*)

ans =

0 64 128 256 512
把第一个数去掉就可以了

ChaChing 发表于 2011-3-12 17:13

回复 5 # huaijuliu 的帖子

看到LZ使用filter, 著实钦佩又吓了一下, 想著怎会联想到数位滤波!?
好奇问下, 原本编程使用目的为何?:@)

filter(,1,32*);也就是b=; a=1; x=32*;相当y(n)=2*x(n-1);
总感觉LZ逛了一大圈, 或许LZ可解惑下!:handshake

huaijuliu 发表于 2011-3-12 17:44

回复 4 # ChaChing 的帖子

看到您的回复 突然想到了自己确实绕了一圈 其实就是想避免for循环
您这个就避免了for循环 感谢

ChaChing 发表于 2011-3-12 21:03

回复 7 # huaijuliu 的帖子

谢谢说明, 其实我本来是怕是否没看清或忽略了什麼...
说真的, LZ的那个方法, 个人还满欣赏的, 很有创意
页: [1]
查看完整版本: 请教有关for循环改变为向量化运算