how to delete particular values in this matrix ?

1 view (last 30 days)
[a b]=[ 0.5708 0.0755 0 0 0 0 0
0 0 161.5569 0 84.9907 35.0193 17.0669];
i don't want the values before this
" 0
0 "
and my answer should be like this..
[c d]=[ 0 0 0 0
0 84.9907 35.0193 17.0669];
  6 Comments
Michael Haderlein
Michael Haderlein on 9 Feb 2015
Edited: Michael Haderlein on 9 Feb 2015
That's quite a lot of code for this question (and most of the code has nothing to do with the question). What is the criterion? Should everything be deleted until a column of zeros? Should the first three columns be deleted? Or is it something else?
case 1: (what Image Analyst was hinting at)
a=[ 0.5708 0.0755 0 0 0 0 0;
0 0 161.5569 0 84.9907 35.0193 17.0669];
allzeros=find(all(a==0));
b=a(:,allzeros:end);
case 2:
b=a(:,4:end);
If none of these cases are what you're looking for, please give detailed information on what you need and post only relevant code.
Matlab111
Matlab111 on 9 Feb 2015
Michael Haderlein- sir, don't go for code just see below i given some example.
question:
c=[0.7893 0.8337 0.1479 0 0 0.1479 0.9993];
1.now i should delete the repeated values in that 'c'.
2.i should delete the values that is displayed before the zeros.
3.And finally i should delete zeros also.
Expected output:
d=[0.9993];

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 10 Feb 2015
To solve your (constantly changing) requirement stated in your last comment to my original answer, try this code:
allR111 = [allR11;allR21];
Y3 = true(1,size(allR111,2));
Y3(1:find(abs(allR111(1,:))<1e-6,1,'last')) = false;
Y3(1:find(abs(allR111(2,:))<1e-6,1,'last')) = false;
allR111(:,Y3)

More Answers (1)

Stephen23
Stephen23 on 9 Feb 2015
Edited: Stephen23 on 9 Feb 2015
Try this:
>> c = [0.7893,0.8337,0.1479,0,0,0.1479,0.9993];
>> X = sum(bsxfun(@(a,b)abs(a-b)<1e-6,c(:).',c(:)))<2;
>> X(1:find(c==0,1,'last')) = false;
>> c(X)
ans = 0.9993
As in my answer to your other related question , note that I did not use equality test == or unique with floating point numbers, but instead compared the difference of two values with some tolerance, in this case 1e-6. You can change the tolerance to best suit your problem.
  7 Comments
Matlab111
Matlab111 on 9 Feb 2015
Edited: Matlab111 on 9 Feb 2015
Stephen Cobeldick- sir, i try your logic with my main code ya i'm getting but, actually i want to get like this, just see below... when "r=0" i'm getting correct values that's what i expected but when "r=1" i'm not getting an expected values.
after applying your approach that you given above
and i want the answer should be like this, from column 40 to 71, no problem if it's a repeated values and i want get only that red marked part
Note: i'm getting for correct answer when "r=0", no problem if the values repeated and i have attached my modified code below..
if you not clear just ask me once again.
Stephen23
Stephen23 on 10 Feb 2015
I have replied to this in a new answer.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!