필터 지우기
필터 지우기

Function to fill an array given conditions.

조회 수: 6 (최근 30일)
Andrew Czeizler
Andrew Czeizler 2019년 3월 13일
댓글: Adam 2019년 3월 13일
Hi All,
I am trying to write a function to fill an array given conditions. basiclly the user inputs two variables a max and min and given these
values it creates two new row vectors, ph and date, which is a subset of an orignal vector.
My code is given below -
function [datenew,phnew] = subsetdata(date, ph, pressure, min, max)
%create empty array
datenew=cell(1,5000);
phnew=cell(1,5000);
%loop through each point
for i=1:size(pressure)
%check condition
if (pressure(i,:)>=min & pressure(i,:)<max)
%fill array if condition met
datenew{i}=date(i);
phnew{i}=ph(i);
end
end
end
  댓글 수: 2
Andrew Czeizler
Andrew Czeizler 2019년 3월 13일
편집: Andrew Czeizler 2019년 3월 13일
date, ph and pressure are row vectors. we go through and check pressure againes max and min. Then if at that point its between the two values we take date and ph at that index and fill and new vector. Returning a new vector date and ph which meets the conditions.
Adam
Adam 2019년 3월 13일
What is your question?
Also, never use min and max as variable names. These are function names in Matlab and by creating variables with those names you hide the respective functions and make them inaccessible to use.

댓글을 달려면 로그인하십시오.

채택된 답변

Adam
Adam 2019년 3월 13일
편집: Adam 2019년 3월 13일
validIdx = pressure >= minVal & pressure < maxVal;
datenew = date( validIdx );
phnew = ph( validIdx );
should do this for you without needing the loop and using logical indexing instead. I don't know why you are putting results in a cell array though. Never use a cell array when a numeric array will do the job.
  댓글 수: 2
Andrew Czeizler
Andrew Czeizler 2019년 3월 13일
편집: Andrew Czeizler 2019년 3월 13일
looking sharp!
Thank you :).
Will give it a try.
I was wondering, what should I use instead? nan()?
Best,
Andrew
Adam
Adam 2019년 3월 13일
Ah, well, if you want to keep positions with NaNs inbetween then you will need to do it slightly different:
datenew = nan( size( date ) );
phnew = nan( size( date ) );
validIdx = pressure >= minVal & pressure < maxVal;
datenew( validIdx ) = date( validIdx );
phnew( validIdx ) = ph( validIdx );

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Andrew Czeizler
Andrew Czeizler 2019년 3월 13일
Hi Adam!
How would you define the numeric array. Im not sure of best practice here.
many thanks,
  댓글 수: 3
Andrew Czeizler
Andrew Czeizler 2019년 3월 13일
so you would use a nan numeric array and then fill it based on conditions?
many thanks,
best,
anAndrew
Adam
Adam 2019년 3월 13일
If you want to retain the positions within the array then yes. You could use -1 if all true data should be positive, but NaN is more logical.

댓글을 달려면 로그인하십시오.

카테고리

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