在struct matlab中获得最大价值

时间:2014-02-21 06:10:44

标签: matlab

我有一个大小为S的结构3x1,其中S(1,1)=[209,443,319, 206] S(2,1)=[300,473,1,1] S(3,1)=[305,470,1,1]我想要做的只是保留一个内部结构S 1}}的大小为1x1而不是nx1此结构是其他结构中第3和第4列中具有最高值的结构。所以在我的示例S中只有S(1,1),因为它的第3和第4列在S(2,1)和S(3,1)中最高,值为319,206,而{1}为1,1 {1}}和S(2,1)因此S(3,1)S(2,1)将被删除,而S(3,1)只会S结构只有1x1。所以如果有人可以请提供建议

1 个答案:

答案 0 :(得分:2)

我将假设您测量第3和第4列比其他数组更大的事实是基于它们的总和。

  S = struct();  
  S(1,1).v=[209, 443, 319, 206];
  S(2,1).v=[300, 473, 1, 1];
  S(3,1).v=[305, 470, 1, 1];


  % find index with maxium 3th and 4th column based on their sum
  [~, ind] = max(cellfun(@(v) v(3)+v(4), {S(:).v}))

  % set S to be equal only to the value with highest 3th and 4th column
  S = S(ind);

顺便说一句,语法S(1,1)=[209,443,319, 206]不正确。不能做这样的结构。因此,我在结构中添加了v字段。

如果你的意思实际上是cell而不是struct,而不是@chappjc指示,那么你可以按照以下方式执行:

  S = {};  
  S{1,1}=[209,443,319, 206];
  S{2,1}=[300,473,1,1];
  S{3,1}=[305,470,1,1];

  [~, ind] = max(cellfun(@(v) v(3)+v(4), S));
  S = S(ind);
相关问题