私はmatlab私は4列の行列を持っています。列2、3、および4の要素がすべてゼロに等しい場合は、行全体を削除したい。matlabで特定の列の要素が0に等しい場合、行全体を削除
だから、私はこのような何かをする必要があると思うが、私は列1を無視したい:
data(all(data==0,2),:) = [];
私はmatlab私は4列の行列を持っています。列2、3、および4の要素がすべてゼロに等しい場合は、行全体を削除したい。matlabで特定の列の要素が0に等しい場合、行全体を削除
だから、私はこのような何かをする必要があると思うが、私は列1を無視したい:
data(all(data==0,2),:) = [];
あなたがあれば、我々は、行を保持する論理インデックス+ any
data = data(any(data(:,2:4),2),:);
ここ
の代わりに、行の削除を使用することができます条件が満たされていない。
% toy example
>> a = [1,0,0,1;
2,0,2,0;
3,0,0,0;
4,4,0,4;
5,0,0,0;
6,0,0,0;
7,0,7,0;
8,0,0,8;
9,0,0,0];
% solution
>> a(sum (a(:, 2:4) == 0, 2) == 3, :) = []
a =
1 0 0 1
2 0 2 0
4 4 0 4
7 0 7 0
8 0 0 8
すなわち、列2〜列4のゼロ数の合計が3に等しい場合は、その行を削除します。
(すなわちlogical indexing使用)あなたはそのようにそれを行うことができます
を:
a(sum((a(:,2:4)==0)')==3,:)=[]
私はこれが好きです、これは非常にエレガントです。あなたの答えでは、これが逆のアプローチであることを明確にする必要があります(つまり、オールゼロテストが成功した行を破棄するのではなく、オールゼロテストが失敗した行を保持しています)。 –