Using find in a for loop error

3 Ansichten (letzte 30 Tage)
Serena Campbell
Serena Campbell am 12 Feb. 2018
Beantwortet: Serena Campbell am 12 Feb. 2018
I have a large matrix with values of "period" p - I am testing this part of my code where I find what row p belongs to in order to access the corresponding row later in my code. However for some reason this will only run three times (so until cct=3) before i get the error: Assignment has more non-singleton rhs dimensions than non-singleton subscripts; error position1(cct,1)=find(p==pp)
*
p=AAA(1:end-1,1); %%%returns 10000x1 matrix of values 0 to 1 in 0.001 steps
cct=1;
for pp =0.1:0.1:0.5;
position1(cct,1)=find(p==pp);
position2=position1(cct,1);
valuep=p(position2,1); %%%to check it is the correct value
cct=cct+1;
end*
  1 Kommentar
Serena Campbell
Serena Campbell am 12 Feb. 2018
Bearbeitet: Serena Campbell am 12 Feb. 2018
So - I put the output into a cell and a strange thing happens - it always skips the third value (no matter what the value is!) and continues nicely after? (see attached output)
p=AAA(1:end-1,1);
cct=1;
for pp =0.4:0.1:1;
test(cct,1)=cct;
valuepp(cct,1)=pp;
x{cct,1}=find(p==pp);
%
cct=cct+1;
end

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Matt J
Matt J am 12 Feb. 2018
Bearbeitet: Matt J am 12 Feb. 2018
You would need to give us AAA in a .mat file to be certain. Most likely, however, pp is not close enough to 0.6 (due to floating point error) to match a value in AAA. Use a tolerance:
x{cct,1}=find(abs(p-pp)<smallnumber);

Weitere Antworten (1)

Serena Campbell
Serena Campbell am 12 Feb. 2018
I worked it out! It must have been a precision problem, as this fixed it:
https://uk.mathworks.com/matlabcentral/answers/17534-find-function-precision-problem

Kategorien

Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by