Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

Excluded Digits from vector

Asked by Harish Maradana

Harish Maradana (view profile)

on 22 Aug 2014
Latest activity Commented on by Guillaume

Guillaume (view profile)

on 22 Aug 2014

vector=[1 2 5 13 55 23 15],excluded dig=5 then out=[1 2 13 23] ,another example vector=[3 24 7 9 18 55 67 71],excluded dig=7 then out=[3 24 9 18 55]

1 Comment

the cyclist

the cyclist (view profile)

on 22 Aug 2014

I posted this as a Cody problem . As you may know, Cody rewards brevity of code over all other things.

Harish Maradana

Harish Maradana (view profile)

Products

No products are associated with this question.

3 Answers

Answer by the cyclist

the cyclist (view profile)

on 22 Aug 2014
Accepted answer

I expect there is a much cleaner method, but here is one that works:

vector = [1 2 5 13 55 23 15];
exDigit = 5;
v = vector;
hasDigit = false(1,numel(v));
while max(v>=1)
    hasDigit = hasDigit | mod(v,10)==exDigit;
    v = floor(v/10);
end
new_vector = vector(not(hasDigit))

0 Comments

the cyclist

the cyclist (view profile)

Answer by Guillaume

Guillaume (view profile)

on 22 Aug 2014
str2num(regexprep(num2str(vector), sprintf('\\<\\d*%d\\d*\\>', digit), ''))

Is a neat one liner but may not be faster than the cyclist answer due to the conversion to/from string and the use of regular expression.

4 Comments

Guillaume

Guillaume (view profile)

on 22 Aug 2014

Another potential method, faster than regexp but still slower than the cyclist's:

vector(arrayfun(@(n) all(num2str(n)-'0' ~= digit), vector))
the cyclist

the cyclist (view profile)

on 22 Aug 2014

I stole this solution and posted it to Cody. As I write this, it is the leader.

Guillaume

Guillaume (view profile)

on 22 Aug 2014

What? No fair! I should so rightly be the leader! ;)

Ha! Beaten with a variant on my regexp one-line :)

Guillaume

Guillaume (view profile)

Answer by the cyclist

the cyclist (view profile)

on 22 Aug 2014

Here is a solution that came out of Cody. The inputs to the function are the vector v and the excluded digit d.

function ans = digitRemove(v,d)
I = [];
for i = 1 : length(v)
    if ~any(ismember( num2str(v(i)) - '0' , d))
        I = [I i];
    end
end
v(I);
end

0 Comments

the cyclist

the cyclist (view profile)

Contact us