我有一些输入,比如:
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);
但无济于事。
任何建议也使用线性索引?
感谢。
答案 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