具有类型单元格的函数

时间:2012-06-21 07:23:26

标签: matlab if-statement

我有这样的数据类型单元格:

A = 'red' 'red' green' 'red'
B = 'red' 'blue' 'red' 'green'
C = 'green' 'red' green' 'blue'
D = 'blue' 'red' 'green' 'red'
E = 'green' 'blue' 'red' 'green'

然后我混合在一个单元格中:

X = {A{:},B{:},C{:},D{:},E{:}}

我这样制表:

Y = tabulate(X)

所以我可以得到结果:

'red'  '9'   '45'
'green' '7'  '35'
'blue' '4'  '20'

如果我想将我的数据分类为:

if 'red' > 90% and 'green' <10% the result is "good"
if 'red' between 70 and 90 % and the result is "ok"
if 'red < 60% the result is "bad"

我无法在单元格中使用if,因为当我使用==时,它不起作用。

1 个答案:

答案 0 :(得分:0)

如果我尝试这一点(如果我手动输入,请事先将A{:},B{:},...内容更改为A,B,...;在您的情况下可能不需要;在您的情况下,[A B C D E ...]应该也能正常工作...),我得到一个这样的X数组:

看起来像这样:

>> X={'red' 'red' 'green' 'blue' 'green'}

X = 

    'red'    'red'    'green'    'blue'    'green'

>> 

如果是这种情况,您的Y将包含数字格式的数字数据,而不是某处的%符号。 Y将是一个包含字符串列和2个数字列的单元格数组:

>> Y=tabulate(X)

Y = 

    'red'      [2]    [40]
    'green'    [2]    [40]
    'blue'     [1]    [20]

现在我可以将这些东西放在一起了。仅作为一个例子:

Z = cell2struct(Y(:,3), Y(:,1))

这里,我将单元格数组的第2列作为数据,将第1列作为要创建的结构的字段名称。这将导致

>> Z=cell2struct(Y(:,3), Y(:,1))

Z = 

      red: 40
    green: 40
     blue: 20
  

为什么会这样?第一个参数是要放入结构字段的数据,在我们的例子中是“百分比”列。第二个参数给出了相应的字段名称,在我们的例子中是“颜色”列。因此,在Z中,字段red获取值40green获取40blue获取20。)

然后我可以做

if Z.red > 90 && Z.green < 10 % why this 2nd condition? The 1st should be enough...
    result = 'good'
elseif Z.red > 70
    result = 'ok'
else
    result = 'bad'
end

或类似的东西(你没有说明60%到70%之间会发生什么......)