2017-03-15 22 views
2

我有一个15 * 2的数组,其中第一列表示面积,第二列表示15个对象的相应圆形度。 我需要选择具有最大面积的行,同时将下面的条件为圆为> 0.9和< = 1.2从2个标准中选择2D阵列 - Matlab

实施例:

Area  Circularity 
-----  ----------- 
22041  1.1703 
23458  2.8425 
155  1.4165 
37  2.1089 
215  1.5692 
41  1.0549 
659  1.7144 
64  1.0508 
3   0.3092 
584  1.2543 
26  1.1132 
396  2.9046 
1   0 
3   0.8488 
4   0.4638 

预期结果:

22041 1.1703 

回答

3

您可以将您的条件应用于第二列以检查它是否在(0.9 1.2]范围内,然后将得到的logical数组与第一列相乘。由于false将被视为0true将被视为1,因此这会将第一列中不符合第二列标准的值清零。然后您可以使用第二个输出max来获得包含最大值的行

[~, ind] = max(data(:,1) .* (data(:,2) > 0.9 & data(:,2) <= 1.2)); 
result = data(ind,:) 
+0

非常感谢您的出色答案。但是有些东西与显示对象有关。 (ind)应该是15个标记对象的索引。然而,(结果)值是正确的,相应的(ind)值= 2必须是1,即索引= 1. –

+1

@MohamedFarrag使用您提供的确切数据,我得到值为'1'。如果您的数据与您发布的数据不同,请更新它。 – Suever

+0

是的,我得到了我的错,这是不同的,由于我的排序。现在它工作正常。再次感谢@Suever –