我是 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
我得到的是:
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
如果有人可以帮助我,我将不胜感激:)
最佳答案
你们很接近。不要使用 length(A)
- 使用 numel(A)
。 length(A)
返回沿最大维度的元素数量。因此,由于有 6 列和 4 行,因此该循环只会迭代 6 次。 numel
返回数组 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
上面的循环将遍历矩阵中的每个元素,如果是偶数,则将相应元素设置为 0,如果是奇数,则将相应元素设置为 1。
但是,我鼓励您在代码上使用矢量化操作。不要为此使用循环。具体来说,您可以通过一次 mod
调用轻松完成此操作:
B = mod(A,2);
mod(A,2)
将以 2 作为操作数计算矩阵 A
中每个值的模,并输出矩阵 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
关于matlab - 如果矩阵中偶数/奇数则更改向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32341953/