0

かなり大きい(2000行以上、30列以上)が、少しこのように見えるデータ値のマトリックスがあります。

NaN   12   3   NaN   18   NaN   42   NaN    NaN   NaN   NaN...
68    NaN  14  Nan   NaN  NaN   NaN  NaN    NaN   NaN   26 ...
...

つまり、これは主にNaN値で占められていることがわかります。当然、私が興味を持っているのは、値が入力されているセルです。

このデータセットでanovanを実行できるようにしたいのですが、残念ながら、手作業で再フォーマットするには大きすぎます。私がやりたいのは、マトリックスを介してスクリプトを実行し、マトリックス内のNaNとそのインデックスではないすべての値を見つけて、アノバン入力用に3つの配列を作成することです。

値=[123 18 42 68 14 26 ...]

行=[11 1 1 2 2 2 ...]

列=[23 5 7 1 3 11 ...]

行と列は調査の評価者と評価者に対応しているため、各値の正確なインデックスを保持することが非常に重要です。

しかし、これを行う方法がわかりません。

findを使用してみましたが、やりたいことができません。

[r c v] = find(~isnan(datamatrix)) %% doesn't work

編集:それは私がちょうどすることができた私に起こります:

[r c v] = find(datamatrix)

ただし、これには[rcv]出力にすべてのNaN値が含まれます。そのような状況では、V配列を調べて、NaN値とそれに対応するR値とC値を削除するにはどうすればよいですか?

EDIT2:それをスクラッチします。一部の値が0であることを忘れたため、FINDコマンドを使用できません。

4

1 に答える 1

2

次のように、データマトリックスからすべての非NaN番号とそのインデックスを抽出できます。

i = find(~isnan(datamatrix)); 
values = datamatrix(i);
[rows,columns] = ind2sub(size(datamatrix),i);

含めたサンプルデータの場合、次のようになります。

rows' = [2   1   1   2   1   1   2]
columns' = [ 1    2    3    3    5    7   11]
values' = [68   12    3   14   18   42   26]

これがすべてのインデックスとそれに対応するすべての値です。特定の方法で注文する必要がある場合は、個別に注文する必要があります。

于 2013-03-20T15:29:41.407 に答える