필터 지우기
필터 지우기

Output showing used cells?

조회 수: 1 (최근 30일)
Robert
Robert 2014년 12월 10일
답변: Geoff Hayes 2014년 12월 10일
I have a condition in my code basically stating only use rows with data in each cell (if there is a NAN, don't use that row). It work fine, but I want it to generate some sort of list to tell me which rows it has used, e.g. if the data looked like
1 2 3 5
2 4 NAN 8
3 5 6 7
I need something like
True
False
True
Here is the part of my code that is relevant, what should I add?
% screen the data over all pixels to select the ones with good data for
% regression analysis
[rows, cols]=size(Amp);
data=zeros(1, 9); % Amp, PET, P, AI, NDVI, ELE, SLOPE, FLOWACCU, SPI
dip=0;
for i=1:rows
for j=1:cols
camp=Amp(i,j);
cpet=PET(i,j);
cp=P(i,j);
cai=AI(i,j);
cndvi=NDVI(i,j);
cele=ELE(i,j);
cslope=SLOPE(i,j);
cflow=FLOW(i,j);
cspi=SPI(i,j);
if isnan(camp)==0 && isnan(cpet)==0 && isnan(cp)==0 && isnan(cai)==0 && isnan(cndvi)==0 && isnan(cele)==0 && isnan(cslope)==0 && isnan(cflow)==0 && isnan(cspi)==0
dip=dip+1;
data(dip,:)=[camp, cpet, cp, cai, cndvi, cele, cslope, cflow, cspi]
end
end
end

답변 (1개)

Geoff Hayes
Geoff Hayes 2014년 12월 10일
Robert - create a logical matrix outside of the for loop and update it at each iteration according to whether there is a NaN in the column (for that row) or not. Something like
% screen the data over all pixels to select the ones with good data for
% regression analysis
[rows, cols]=size(Amp);
data=zeros(1, 9); % Amp, PET, P, AI, NDVI, ELE, SLOPE, FLOWACCU, SPI
dip=0;
isNanFree = logical(zeros(rows,cols));
for i=1:rows
for j=1:cols
% etc.
if isnan(camp)==0 && ...
isNanFree(i,j) = true;
% etc.
end
end
You can then simplify the isNanFree matrix to a column vector if needed.
As an aside, you should try to avoid using i and j as names for (indexing) variables as MATLAB also uses i and j to represent the imaginary number.
Also, you could modify your conditions to something like
~isnan(camp)
which is equivalent to yours but a little neater.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by