- The fopen documentation states that fid is an integer file identifier .... The variable fid does not contain the file data, it is merely a reference to an open file. And it is also a scalar value. Therefore your attempt to index into fid as if it were a data array doesn't make any sense.
- Over-complicated method of reading a text file: first textscan, then cellfun calling textscan again, all just to avoid some header lines? Instead you should read textscan 's documentation, and use the HeaderLines option, like this:
How can I remove NaN values from a matrix?
2.437 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Brandon Walker
il 18 Feb 2015
Modificato: Stephen23
il 15 Ago 2020
My code so far is below. I have the code so that it skips the first 19 lines and starts at line 20. However, I need to remove the NaN values that are in my data like Columns = [10;0.04500;0;NaN;NaN] for example. The line I have to remove the NaN's runs, it's just not removing them. I'm not sure what isn't working. How do I fix my issue?
Thanks
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)),:) = [];
0 Commenti
Risposta accettata
Stephen23
il 18 Feb 2015
Modificato: Stephen23
il 15 Ago 2020
The code has multiple issues that need to be fixed. Here a a couple of things to improve:
fid = fopen('filename.txt', 'r');
data = textscan(fid, '%f', 'delimiter','\t', 'HeaderLines',20);
fclose(fid)
I also removed the CollectOutput option, as this is superfluous if there is only one format specifier. For the same reason the delimiter doesn't really make sense either. If you have multiple values per line, then you need to specify them in the formatSpec: there are plenty of examples in the documentation.
Starting in R2018b, you can use the “rmmissing” function to remove “NaN” values from an array. For example, consider the following:
A = [1,NaN,2];
B = rmmissing(A)
The result is the vector “B = [1 2]”.
In R2018a and earlier, use the “isnan” function:
A = [1,NaN,2];
B = A(~isnan(A))
5 Commenti
Più risposte (3)
Erik S.
il 18 Feb 2015
Modificato: per isakson
il 25 Mag 2018
You can you something like this
ind = ~isnan(Columns);
Columns=Columns(ind);
0 Commenti
Cong Dong Ngoc Minh
il 16 Giu 2020
You can try this way
idx =isnan(Columns)
Columns(idx,:) = []
0 Commenti
berfin karabulut
il 14 Ago 2020
or you can simply use "omitnan" function?
1 Commento
Walter Roberson
il 15 Ago 2020
omitnan is not a Mathworks function. It is an option that can be used in some functions that are not relevant to the question asked.
Vedere anche
Categorie
Scopri di più su Data Import and Export in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!