10

マトリックス内のすべての NaN を、それぞれをループして isnan を使用して置き換えるというアイデアがありました。ただし、これによりコードの実行が必要以上に遅くなると思われます。誰かがより良い提案を提供できますか?

4

3 に答える 3

25

あなたのマトリックスが次のようになっているとしましょう:

A = 
     NaN   1       6
     3     5     NaN
     4     NaN     2

次のように使用して、要素を見つけてNaNゼロに置き換えることができます。isnan

A(isnan(A)) = 0;

次に、出力は次のようになります。

A =
     0     1     6
     3     5     0
     4     0     2
于 2013-01-21T13:25:05.440 に答える
5

xが行列の場合、関数を使用してisnan配列にインデックスを付けます。

x( isnan(x) ) = 0

2 つのステップで行うと、何が起こっているのかがより明確になるでしょう。最初に true/false 値の配列を作成し、次にこれを使用して選択した要素をゼロに設定します。

bad = isnan(x);
x(bad) = 0;

これはかなり基本的なものです。MATLAB のオンライン チュートリアルをいくつか読んで、理解を深めてください。

于 2013-01-21T13:24:36.720 に答える
4

関数isnanはベクトル化されます。つまり、次のようになります。

>> A = [[1;2;NaN; 4; NaN; 8], [9;NaN;12; 14; -inf; 28 ]]
A =
     1     9
     2   NaN
   NaN    12
     4    14
   NaN  -Inf
     8    28

>> A(isnan(A)) = 0
A =
     1     9
     2     0
     0    12
     4    14
     0  -Inf
     8    28
于 2013-01-21T13:25:08.983 に答える