我试图弄清楚如何在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。
任何建议表示赞赏!谢谢!
答案 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)
。