使用条件语句分配结构

时间:2014-03-11 22:51:31

标签: matlab struct conditional-statements textscan

我想根据条件(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

2 个答案:

答案 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