如果矩阵中的偶数/奇数,则更改向量

BMG*_*BMG 2 matlab

我是Matlab编程的新手,到目前为止我只有3个班级.我的作业有问题.(我也是来自冰岛,所以英语不是我的第一语言,请原谅我的语法)我给了一个矩阵,A和我应该改变价值?如果是偶数,则向量为0,如果为奇数,则为1.

这就是我到目前为止所拥有的.

    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
Run Code Online (Sandbox Code Playgroud)

我得到了这个:

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
Run Code Online (Sandbox Code Playgroud)

如果有人可以请帮助我,将不胜感激:)

ray*_*ica 5

你很近.不要使用length(A)- 使用numel(A). length(A)返回沿最大维度的元素.因此,因为你有6列和4行,这个循环只会迭代6次. numel返回数组中元素A总数,这是您想要迭代每个值的所需内容A.

因此:

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
Run Code Online (Sandbox Code Playgroud)

上面的循环将遍历矩阵中的每个元素,并将相应的元素设置为0(如果是偶数),如果是奇数则设置为1.

但是,我鼓励您对代码使用矢量化操作.不要为此使用循环.具体来说,您只需一次mod通话即可轻松完成此操作:

B = mod(A,2);
Run Code Online (Sandbox Code Playgroud)

mod(A,2)将计算矩阵中每个值的模数,A其中2为操作数,并输出B相同大小的矩阵.这将精确计算每个数字的奇偶校验.

我们得到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
Run Code Online (Sandbox Code Playgroud)