沿着行执行连续的XOR

时间:2018-03-01 23:15:11

标签: matlab xor

我试图弄清楚如何在matlab中的一行上执行连续的XOR,其中每个元素都是XORing本身和前一个元素的结果,例如:

如果行是

x = [1 0 1 1]

我希望结果是:

x[0] = 1
x[1] = x[0]^x[1] = 1
x[2] = x[1]^x[2] = 0
x[3] = x[2]^x[3] = 1
x = [1 1 0 1]

我尝试过使用xor(A,B),但这似乎只能同时在多个数组上运行。我也试过这个循环:

for k = 10000:1
    for i = 1:64
        allchallenge_full(k,i+1) = xor(allchallenge_full(k,i).^allchallenge_full(k,i+1))
    end
end

但这只会导致所有1。

任何建议表示赞赏!谢谢!

2 个答案:

答案 0 :(得分:4)

如果输入x只是零和1:

result = mod(cumsum(x), 2);

将其应用于矩阵x的每一行:

result = mod(cumsum(x,2), 2);

答案 1 :(得分:2)

如果你想让事情变得简单,for循环和xor function(Matlab中的^代表权力提升)应该可以正常工作:

x = [1 0 1 1];

for i = 2:numel(x)
    x(i) = xor(x(i-1),x(i));
end

最终输出是预期的输出:

x =
     1     1     0     1

请记住,在Matlab中,索引是基于一的,而不是像许多其他编程语言一样基于零。因此,x的第一个元素是x(1),而不是x(0)