5

を使用すると NaN として表示される多くの空のセルを含むファイルがありますcell2matが、平均値を取得する必要がある場合、NaN でエラーが表示されるため、これを使用できません。Excel では NaN 値を見落としているため、MATLAB で同じことを行うにはどうすればよいですか?

さらに、次を使用してファイルを作成していますxlswrite

xlswrite('test.xls',M);

1 を除くすべての行にデータがあります。どのように書きますか:

M(1,:) = ('time', 'count', 'length', 'width')

言い換えれば、私は、、、などを望んM(1,1)='time'M(1,2)='count'います。M(2,1)からまでのデータがありますM(10,20)。これどうやってするの?

4

5 に答える 5

9

APが正しく指摘しているように、この関数を使用してisfinite、行列内の有限値のみを検索して保持できます。関数を使用することもできますisnan。ただし、行列から値を削除すると、行列を行または列のベクトルに再形成するという意図しない結果が生じる可能性があります。

>> mat = [1 2 3; 4 NaN 6; 7 8 9]  % A sample 3-by-3 matrix

mat =

     1     2     3
     4   NaN     6
     7     8     9

>> mat = mat(~isnan(mat))  % Removing the NaN gives you an 8-by-1 vector

mat =

     1
     4
     7
     2
     8
     3
     6
     9

もう1つの方法は、NaN値を含む行列を処理するように設計されたStatistics Toolboxのいくつかの関数(アクセスできる場合)を使用することです。あなたは平均を取ることに言及しているので、あなたはチェックしたいかもしれません:nanmean

>> mat = [1 2 3; 4 NaN 6; 7 8 9];
>> nanmean(mat)

ans =

     4     5     6     % The column means computed by ignoring NaN values



編集:の使用に関する追加の質問に答えるためにxlswrite、このサンプルコードは、データを書き込むことができる1つの方法を示している必要があります。

C = {'time','count','length','width'};  % A cell array of strings
M = rand(10,20);                        % A 10-by-20 array of random values
xlswrite('test.xls',C);           % Writes C to cells A1 through D1
xlswrite('test.xls',M,'A2:T11');  % Writes M to cells A2 through T11
于 2010-03-17T18:21:10.910 に答える
7

「 isfinite 」関数を使用して、すべての NaN と無限大を取り除きます

A=A(有限(A))

%列ヘッダーを含むセル配列を作成 columnHeader = {'Column 1', 'Column 2', 'Column 3', 'Column 4', 'Column 5',' '};

% 最初に列ヘッダーを書き込みます xlswrite('myFile1.xls', columnHeader );

% 列ヘッダーのすぐ下にデータを書き込みます xlswrite('newFile.xls',M,'Sheet1','A2');

于 2010-03-17T18:02:06.253 に答える
5

Statistics Toolboxには、NaN値を処理するためのいくつかの統計関数があります。nanmean、nanmedian、nanstd、nanmin、nanmaxなどを参照してください。

于 2010-03-17T18:20:38.243 に答える
0

次のように、NaNを任意の数に設定できます。

mat(isnan(mat))=7 // my lucky number of choice. 
于 2012-11-17T13:03:43.497 に答える
0

手遅れかもしれませんが...

x = [1 2 3; 4 inf 6; 7 -inf NaN];
x(find(x == inf)) = 0; //for inf
x(find(x == -inf)) = 0; //for -inf
x(find(isnan(x))) = 0; //for NaN
于 2014-12-21T13:14:03.277 に答える