1

嗨,这是我第一次想使用 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 的一行中的第一个值与情感词进行比较,并将 to 的一行中的第二个值pxyvector进行比较tweet{x}。如果他们是一样的。行中的第三个值递增。

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

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

一些数据可以玩:http ://ojtwist.be/pxyvector.mat(这个.mat文件中的变量是pxyvector2,所以如果你想测试它,请在代码中更改它)

4

1 回答 1

1

我想这里的问题是 matlab 没有将单元矩阵作为普通矩阵处理(实际上 a{1,:} 的行为不像你预期的那样)。

AFAIK,要使用parfor您需要不同的数据组织,特别是作为Nx1 cell元素3x1 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,但是您当前的数据组织将使创建适当的分布式数组变得困难。

于 2012-11-24T18:15:50.890 回答