删除不包含特定范围之间的2个或更多数字实例的矩阵列 - MATLAB

时间:2014-10-30 16:10:10

标签: 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 个答案:

答案 0 :(得分: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)=[];