【发布时间】:2012-02-01 18:00:32
【问题描述】:
我已经在 Matlab 的 Profiler 中运行了以下代码,对我来说,对这段代码进行矢量化是非常必要的,因为我觉得这是不必要的 for 循环。
我有 2 个矩阵 G 和 source_data。 G 中的每一列都将确定我需要从 source_data 中提取的行并将它们异或在一起。
我正在使用以下代码创建 G 和 source_data
for i=1:10
source_data(i,:)=rand(1,20)<.8;
end
for i=1:15
G(:,i)=rand(10,1)<.9;
end
我正在使用下面的 for 循环执行异或操作:
z=1;
while(i<=15)
for j=1:10
if(G(j,i)==1)
intersum(z+1,:)=xor(intersum(z,:), source_data(j,:));
z=z+1;
end
end
C(i,:)=intersum(z,:);
i=i+1;
end
有没有办法对这段代码进行矢量化?对于小矩阵,时间延迟是可以接受的,但对于大矩阵,此代码效率很高。
谢谢,
佛系
【问题讨论】:
-
最后一个循环中的
i和K是什么?xor本身已经矢量化了,也许对你有帮助:mathworks.de/help/techdoc/ref/xor.html 否则你可以看看arrayfun -
@Alexandrew 感谢您指出这一点编辑上述问题
标签: matlab vectorization xor