Change vector if even/odd in a matrix

时间:2015-09-01 22:37:44

标签: matlab

I'm new to Matlab programming and I've only had 3 classes so far. I'm having problem with my homework. (Also I am from Iceland so english is not my first language, so please forgive my grammar) I'm given a matrix, A and I'm supposed to change the value? of a vector to 0 if it is an even number and to 1 if it is an odd number.

This is what I have so far.

    A = [90 100 87 43 20 58; 29 5 12 94 8 62; 75 21 36 83 35 24; 47 51 70 59 82 33]; 
    B = zeros(size(A));

    for k = 1:length(A)
        if mod(A(k),2)== 0 %%number is even
            B(k) = 0;
        else
            B(k) = 1;    %%number is odd
        end

end

B(A,2==0) = 0;
B(A,2~=0) = 1

What I am getting it this:

B =
     0     0     0     0     0     0
     1     1     0     0     0     0
     1     0     0     0     0     0
     1     0     0     0     0     0
     1     0     0     0     0     0

If anyone could please help me, it would be greatly appreciated :)

1 个答案:

答案 0 :(得分:5)

You are very close. Don't use length(A) - use numel(A). length(A) returns the number of elements along the largest dimension. As such, because you have 6 columns and 4 rows, this loop will only iterate 6 times. numel returns the total number of elements in the array A, which is what you want as you want to iterate over each value in A.

Therefore:

A = [90 100 87 43 20 58; 29 5 12 94 8 62; 75 21 36 83 35 24; 47 51 70 59 82 33]; 
B = zeros(size(A));

for k = 1:numel(A) %// Change
    if mod(A(k),2)== 0 %%number is even
        B(k) = 0;
    else
        B(k) = 1;    %%number is odd
    end
end

The above loop will go through every single element in the matrix and set the corresponding element to 0 if even and 1 if odd.

However, I encourage you to use vectorized operations on your code. Don't use loops for this. Specifically, you can do this very easily with a single mod call:

B = mod(A,2);

mod(A,2) will compute the modulus of every value in the matrix A with 2 as the operand and output a matrix B of the same size. This will exactly compute the parity of each number.

We get for B:

>> A = [90 100 87 43 20 58; 29 5 12 94 8 62; 75 21 36 83 35 24; 47 51 70 59 82 33]; 
>> B = mod(A,2)

B =

     0     0     1     1     0     0
     1     1     0     0     0     0
     1     1     0     1     1     0
     1     1     0     1     0     1