作者candy88257 (阿泰斯)
看板MATLAB
标题Re: [讨论] parfor能否每计算一个idx就输出一次存档?
时间Sun Apr 28 14:00:08 2013
※ 引述《jmren (jm)》之铭言:
: 这是使用parfor常见问题!
: 解法:另外写myWrite function,并存成新档
: function myWrite(path,data)
: csvwrite(path,data);
: 在parfor中,直接呼叫myWrite,而不是csvwrite
: parfor ii=1:10
: ...
: myWrite('资料夹+档名',data);
: end
好像不行!?
刚测试了一下
这是我的测试程式档:
function tempdata=test(yymin,yymax,yyd)
xx=sym('xx');
nextformax=fix(((yymax-yymin)/yyd)+1);
parfor ii=1:nextformax
yy=yymin+yyd*(ii-1);
mymatrix=[xx+2*yy,3*xx,6*yy;xx,yy,2*xx+3*yy;yy,7*xx,3*yy];
eq=det(mymatrix);
myans(:,ii)=double(solve(eq,'xx')) %假设解的个数相同
end
tempdata=myans;
end
这是我的function mycsvwrite
function mycsvwrite(file,data)
csvwrite(file,data);
end
以下做测试:
1.加入mycsvwrite:
function tempdata=test(yymin,yymax,yyd)
xx=sym('xx');
nextformax=fix(((yymax-yymin)/yyd)+1);
parfor ii=1:nextformax
yy=yymin+yyd*(ii-1);
mymatrix=[xx+2*yy,3*xx,6*yy;xx,yy,2*xx+3*yy;yy,7*xx,3*yy];
eq=det(mymatrix);
myans(:,ii)=double(solve(eq,'xx')) %假设解的个数相同
mycsvwrite('D:\testwrite',myans(:,ii)) % 这里的myans不加(:,ii)的话,
马上parfor下面会出现红线
end
tempdata=myans;
end
这样写的话汇出的csv档只有一行...(只汇出一组解...)
2.加入data=[];
function tempdata=test(yymin,yymax,yyd)
xx=sym('xx');
data=[];
nextformax=fix(((yymax-yymin)/yyd)+1);
parfor ii=1:nextformax
yy=yymin+yyd*(ii-1);
mymatrix=[xx+2*yy,3*xx,6*yy;xx,yy,2*xx+3*yy;yy,7*xx,3*yy];
eq=det(mymatrix);
myans(:,ii)=double(solve(eq,'xx')) %假设解的个数相同
data=[data,myans(:,ii)]; % 这里的myans不加(:,ii)的话,马上parfor下面会出
现红线
mycsvwrite('D:\ab\testwrite',data); %多这行parfor下面出现红线
end
tempdata=myans;
end
红线详细: The PARFOR loop cannot run due to the way variable 'myans' is used.
(或data)
怎会这样!?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.130.17.157
1F:推 jmren:以cell array方式储存/传递myans(:,ii); 04/29 07:27
2F:→ candy88257:一样……,现在问题是myans在parfor里面 04/29 15:00
3F:→ candy88257:出现2次parfor下面就出现红线 04/29 15:00
4F:→ candy88257:好像跟解储存成什麽形式无关 04/29 15:01
5F:→ candy88257:我找到isavex那个范例了,我好好研究一下,感谢您热心 04/29 16:09
6F:→ candy88257:协助!! 04/29 16:09