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

Learn moreOpportunities for recent engineering grads.

Apply Today
Asked by Harish Maradana on 22 Aug 2014 at 12:15

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]

*No products are associated with this question.*

Answer by the cyclist on 22 Aug 2014 at 13:23

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))

Answer by Guillaume on 22 Aug 2014 at 13:45

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.

Show 1 older comment

Guillaume on 22 Aug 2014 at 14:50

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

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

the cyclist on 22 Aug 2014 at 15:27

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

Answer by the cyclist on 22 Aug 2014 at 15:25

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

## 1 Comment

Direct link to this comment:http://mathworks.com/matlabcentral/answers/151932#comment_233117

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