- fopenの使用について:
- fopenのドキュメントによると、fidは整数のファイル識別子であり、ファイルデータを含むものではなく、開かれたファイルへの参照に過ぎません。また、これはスカラー値です。そのため、fidをデータ配列のようにインデックスすることは意味がありません。
- テキストファイルの読み込み方法:
- 現在の方法は複雑すぎます。最初にtextscanを実行し、その後cellfunで再びtextscanを呼び出すという方法は、ヘッダー行を避けるためだけに行われています。代わりに、textscanのドキュメントを参照し、HeaderLinesオプションを使用するべきです。例えば、以下のようにします。
fid = fopen('filename.txt', 'r');data = textscan(fid, '%f', 'delimiter','\t', 'HeaderLines',20);fclose(fid);- CollectOutputオプションは、フォーマット指定子が1つだけの場合には不要です。同様に、デリミタも適切に指定する必要があります。複数の値が1行にある場合は、フォーマット指定子でそれらを指定する必要があります。ドキュメントには多くの例がありますので、参考にしてください。
- NaN値の削除方法:
- R2018b以降では、rmmissing関数を使用して配列からNaN値を削除できます。例として以下をご覧ください。
A = [1, NaN, 2];B = rmmissing(A);- 結果はベクトルB = [1 2]となります。
- R2018a以前のバージョンでは、isnan関数を使用します。
A = [1, NaN, 2];B = A(~isnan(A));
行列からNaN値を削除するにはどうしたらよいですか?
61 ビュー (過去 30 日間)
古いコメントを表示
MathWorks Support Team
2024 年 11 月 14 日 0:00
回答済み: MathWorks Support Team
2024 年 11 月 14 日 5:48
私の現時点のコードは以下の通りです。コードは最初の19行をスキップして20行目から開始するようにしています。しかし、例えば列が[10;0.04500;0;NaN;NaN]のようなデータからNaN値を削除する必要があります。NaNを削除するための行は実行されますが、実際には削除されません。何がうまくいっていないのかわかりません。この問題をどのように解決すればよいでしょうか?よろしくお願いします。
fid = fopen('filename.txt');
Rows = textscan(fid, '%s', 'delimiter', '\n');
fclose(fid);
Columns= cellfun(@(x) textscan(x,'%f','delimiter','\t','CollectOutput',1) ...
, Rows{1,1}(20:end, :));
fid(isnan(fid(:,1)),:) = [];
採用された回答
MathWorks Support Team
2024 年 11 月 14 日 0:00
コードにはいくつか修正が必要な問題があります。以下に改善点を示します。
これにより、NaN値を効果的に削除できるはずです。
0 件のコメント
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で ビッグ データの処理 についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!