删除前导列值< = 0

时间:2013-12-14 06:45:10

标签: matlab octave

我有一些输入,比如:

a = -1.60400000000000,-0.604000000000000,0.396000000000000,1.39600000000000,2.39600000000000,3.39600000000000,4.39600000000000,5.39600000000000,6.39600000000000,7.39600000000000

我想删除值为负/ 0的列。

我尝试了以下内容:

a = max(a, 0);
a = a(:,a(:,:)>0); 

但无济于事。

任何建议也使用线性索引?

感谢。

2 个答案:

答案 0 :(得分:2)

您的示例可以使用

a(a>0)

答案 1 :(得分:2)

删除元素的另一种方法(除了重新分配数组)是将[]分配给要删除的元素。对于1D行/列向量

a(a<=0) = []

目前尚不清楚矩阵需要什么,但是您要删除该列中所有值均为负值的列:

a(:,all(a<=0,1)) = []

或者,如果您要删除包含任何负值的列:

a(:,any(a<=0,1)) = []

为了将每列的第一个元素/行视为删除整个列的指示符:

a(:,a(1,:)<=0) = []

例如:

>> a=rand(5)-0.5
a =
    0.0822   -0.3808    0.0447    0.4937   -0.0954
    0.0407    0.4398    0.1473   -0.2813   -0.0516
    0.3699    0.1456    0.0439   -0.3942   -0.1342
   -0.2352   -0.0205    0.2210   -0.3903    0.2635
   -0.1819    0.1393    0.0225   -0.4364    0.1279

>> a(:,a(1,:)<=0) = []
a =
    0.0822    0.0447    0.4937
    0.0407    0.1473   -0.2813
    0.3699    0.0439   -0.3942
   -0.2352    0.2210   -0.3903
   -0.1819    0.0225   -0.4364