我是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)
如果有人可以请帮助我,将不胜感激:)
你很近.不要使用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)