嗨,这是我第一次使用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,因此如果要对其进行测试,请在代码中进行更改)
答案 0 :(得分:1)
我想这里的问题是matlab不像正常矩阵一样处理单元矩阵(事实上,{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
,但您当前的数据组织将难以创建正确的分布式阵列。