matlab - 如果矩阵中偶数/奇数则更改向量

标签 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

我得到的是:

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/

相关文章:

java - 我们可以在 MATLAB 中应用密码学技术吗?

java - 对来自 Matlab 背景的 Java 数组进行索引

在 Linux 中从 C 连接到 Matlab 引擎

c++ - 分配具有特定索引的矩阵行

matlab - Matlab 函数的多个工具提示输入建议

function - 将 varargin 解包为单个变量

r - 约束最小二乘回归 - Matlab 或 R

matlab - 为什么 Matlab 中两个不同格式的日期时间不相等?

c++ - 在 Ubuntu 上从 C++ 调用 Matlab

matlab - 为什么我的轴对象的 ButtonDownFcn 回调在绘制某些内容后停止工作?