2014-10-30 217 views
1

如果我有一个矩阵是这样的:删除矩阵列 - MATLAB

400  450  450  300 
450  300  450  340 
450  200  300  210 
300  100  300  200 
200  200  100  100 
475  300  225  300 

什么是要删除的做所有列的最佳方式不包含特定范围内的数字 - 例如400-500 - 至少两次或更多。在这个例子中,列B和D将被删除,因为B只包含一次在此范围内的数字,而D在此范围内不包含任何内容。

所需的输出将是:

400  450 
450  450 
450  300 
300  300 
200  100 
475  225 

我试图使用IF语句来扫描每个列,然后继续比赛到一个新的矩阵,但是这似乎效率不高。

回答

1

假设A是输入矩阵,你可以使用这个矩阵索引方法 -

A(:,sum(A>=400 & A<=450,1)>=2) 

这必须是一个非常有效的方法,您的问题。

sum(A>=400 & A<=450,1)>=2得到我们一个满足我们需求的列的逻辑数组,然后我们用它索引到A的列。

注意:如果要删除的列数与列总数相比是非常小的数字,则可以直接删除它们而不是索引到匹配列中,以便在特殊情况下使用更有效的方法。所以,在这种情况下,你可以做到这一点 -

A(:,sum(A>=400 & A<=450,1)<2)=[];