我想根据条件(Matlab)将输入数据分配给2个不同的结构。这样做的最佳方式是什么?
FILE points.dat
% Point ID X Y CODE
Station1 2.2 4.5 0
Station2 5.1 6.7 0
Station3 7.3 3.2 1
Station4 2.1 5.0 1
目标:如果代码= 0,则分配给结构A.如果不是,则分配给结构B.
这是我尝试过的。只是在黑暗中拍摄,真的。
fid = fopen('points.dat');
C = textscan(fid, '%s %f %f %f', 'CommentStyle','%');
fclose(fid);
if (C{4} == 0)
A = struct('id',C{1}, 'x', num2cell(C{2}), 'y', ...
num2cell(C{3}), 'code', num2cell(C{4}));
else
B = struct('id',C{1}, 'x', num2cell(C{2}), 'y', ...
num2cell(C{3}), 'code', num2cell(C{4}));
end
答案 0 :(得分:1)
如果语句没有矢量化。 if
的矢量化形式使用布尔矢量。
这样的事情应该有效:
mask = (C{4} == 0);
A = struct('id',C{1}(mask), 'x', num2cell(C{2}(mask)), ...
'y', num2cell(C{3}(mask)), 'code', num2cell(C{4}(mask)));
B = struct('id',C{1}(~mask), 'x', num2cell(C{2}(~mask)), ...
'y', num2cell(C{3}(~mask)), 'code', num2cell(C{4}(~mask)));
答案 1 :(得分:0)
这不像矢量化那么优雅,但在这种情况下可能更清楚。它产生两个结构数组。
A=[];
B=[];
for i=1:4
temp.id={C{1}(i)}; %the second set of braces turn it from a cell to a string
temp.x =C{2}(i);
temp.y =C{3}(i);
if C{4}(i)==0
A=[A;temp]; %concatenate
else
B=[B;temp];
end;
end