- set the nan value to some other valid value
- remove the whole row with the nan in it, or
- remove the whole column with the nan in it.
How to find NaN in a matrix and delete it?
8 views (last 30 days)
Show older comments
Alyssa Gailliaert
on 26 Dec 2018
Commented: Star Strider
on 28 Dec 2018
Hello,
I've got a large matrix and for two columns I need to find the NaNs and to delete them. I need to delete them in the MarketCapY column and the DebtEquityY column.
Below, you find the code that is already written.
for i=1:28
EquityY= equity (:,i);
TotalDebtY= TotalDebt (:,i);
MarketCapY= MarketCap (:,12*i+1:12*(i+1)+1);
TotalReturnY = TotalReturn (:,12*i+1:12*(i+1)+1);
DebtEquityY= TotalDebtY./EquityY;
DataY= [DebtEquityY MarketCapY TotalReturnY];
[row,col] = find(isnan(MarketCapY));
out = DataY(any(~isnan(MarketCapY),2),:)
[row, col] = find(isnan(DebtEquityY));
out = DataY(any(~isnan(DebtEquityY),2),:);
You can see that the first two columns of DataY must be eliminated. I already tried something, but I don't know if it's correct.
3 Comments
Image Analyst
on 26 Dec 2018
That wouldn't work for a matrix, but would for a vector. If DebtEquityY, MarketCapY, and TotalReturnY are all vectors, and they all have nan's in the same position, that would work. If they have nan's in different locations then you'll have to use any() on DataY matrix, like Star Strider showed below. Maybe you could at least vote for the answers below or accept the best one to give them reputation points.
Accepted Answer
Star Strider
on 26 Dec 2018
You have the logical negation ‘~’ in the incorrect position.
Example —
A = rand(4);
A(2,3) = NaN;
A(3,4) = NaN
Q1 = ~(any(isnan(A),1))
Q2 = ~(any(isnan(A),2))
Out1 = A(:,~any(isnan(A),1)) % Select Columns
Out2 = A(~any(isnan(A),2),:) % Select Rows
You also need to be certain that you are selecting columns or rows.
5 Comments
Star Strider
on 28 Dec 2018
I am slightly confused with respect to your data set, and what you want to do with it.
I assume this is your ‘DataY’ matrix:
DataY = [DebtEquityY MarketCapY TotalreturnY];
and ‘DataY’ is therefore an (Nx15) matrix, and you apparently want to delete the rows where either the first or second columns have NaN elements. If so, this will probably work:
out = DataY(~any(isnan(DataY(:,[1 2])),2),:)
More Answers (1)
See Also
Categories
Find more on Operators and Elementary Operations in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!