并行for循环matlab

时间:2012-11-24 11:09:28

标签: matlab parallel-processing

嗨,这是我第一次使用matlab中的并行工具箱。我有这个循环

for y=1:size(pxyvector,1)
    if (strcmp(pxyvector{y,1}, emotionword))&&(strcmp(pxyvector{y,2},tweet{x}))
          pxyvector{y,3} = pxyvector{y,3} +1;
          invector = true;
    end
end

我如何以平行for的方式完成这项工作。我阅读了matlab的切片变量部分,但我不知道如何在这里做到这一点。

pxyvector是100000x3单元阵列

tweet{x}是一个字符串

emotionword也是一个字符串。

invector是稍后在循环外使用的值。

所以基本上我将pxyvector的一行中的第一个值与情感词进行比较,将pxyvector的一行中的第二个值与tweet{x}进行比较。如果它们是相同的。行中的第三个值会增加。

在循环期间,相同的值不能递增两次。

这个for循环中的问题是我需要更改在循环外部使用的变量并增加一个值。

要播放的一些数据:http://ojtwist.be/pxyvector.mat(变量是此.mat文件中的pxyvector2,因此如果要对其进行测试,请在代码中进行更改)

1 个答案:

答案 0 :(得分:1)

我想这里的问题是matlab不像正常矩阵一样处理单元矩阵(事实上,{1,:}并不像你期望的那样)。

AFAIK,要使用parfor,您需要一个不同的数据组织,特别是Nx1 cell3x1 cell个元素。

以下作品,例如

tot = size(pxyvector,1)
%%%%// just to reshape data correctly
pxvector_a = pxyvector;
pxyvector = cell(1,tot);
for i = 1:tot
   pxyvector{i} = {pxvector_a{i,1} pxvector_a{i,2} pxvector_a{i,3}};    
end
%%%%

 parfor y=1:tot
    if (strcmp(pxyvector{y}{1}, 'almost'))&&(strcmp(pxyvector{y}{2},'that'))
          pxyvector{y}{3} = pxyvector{y}{3} +1;
          invector = true;
    end
end

您仍然可以使用smpd,但您当前的数据组织将难以创建正确的分布式阵列。