2017-11-04 51 views
0

行列Aのサイズは13472x1537です。この行列は1より小さい値を含んでいます。私の場合は、次の条件を満たす解を探します。 列に1より小さい値が含まれている場合は、同じ列の他のすべての値をNaNに置き換えます。配列要素を検索し、MATLABの列を置き換えます

これらの値(1より小さい)を前の値(または任意の値)と置き換えることのできるコードを実装できました。しかし、後で(または前の)値が1より大きいかどうかに関係なく、列の各値をNaNに変更するソリューションを探しています。

私はi=1537です。あなたは値を保持したい場合は

A = randn(5)+2; % Random example 
[row,col] = find(A<1); 
A(:,col) = NaN; 

:ループを取り除く以下

for i = 1:size(A,2) 
    if ~isempty(find(A(:,i) <= 1)) 
     A(:,i)=nan(size(A,1),1); 
    end 
end 
+2

1つの列に複数の値が1より小さい場合の動作は何ですか? –

+0

@DennisKlopfer:問題を指定する必要があります。列に1より小さい値が1つ以上ある場合、列のすべての値はNaNを返す必要があります。 – Joe

答えて

2

バージョンは、次のようになりますようになるt=13472

for i = 1:size(A,2) 
    I = A(1,i); 
    for t= 2:size(A,1) 
     if A(t,i) <= 1 
      A(t,i) = I; 
     else 
     I = A(t,i); 
     end 
    end 
end 
+0

このソリューションは、1より小さいすべての値を識別する意味で機能します。しかし、あなたのランダムサンプルと5x5行列を持つと、1x5ベクトルを返します。 1より小さいセルの実際の値を返す5x5行列を得ることは可能でしょうか?または、「repmat」関数を使用して、if文を使って作業することを提案します。A == 0元の行列からの戻り値?たぶん、よりスムーズなソリューションがありますか? – Joe

+0

'A'はまだ1より小さいすべての値を含む5x5行列です。あなたの質問は本当に分かりません。あなたはベクトルの代わりに行列としてどの出力を明確にすることができますか?この場合、 'repmat'をどのように使いたいか分かりません。コードの第2部分を編集して、メモリ空間を少なくしました。 –

1

1より小さい行列は次のようになります。

A = randn(5)+2; % Random example 
[row,col,ind] = find(A<1); 
b = A(ind) 
A(:,col) = NaN; 
A(ind) = b; 
関連する問題