matlab中的快速xor数组

时间:2011-10-11 05:35:08

标签: matlab xor

对于矩阵的每一列而言,是否有一种比这更有效的方法呢?

mod(sum(matrix),2)

它从逻辑转换为double并使用昂贵的模数。

更新

根据this source,求和uint比求和双倍更慢,因为它涉及最大限幅和其他原因。 另请注意,求和逻辑('native')在1处停止。

2 个答案:

答案 0 :(得分:2)

我试图避免演员阵容double,但这并不是更好(通常更糟)。

A = rand(2000000, 1) > 0.5;
 class(A)

tic
B = mod(sum(A),2)
toc

tic
C = mod(sum(uint32(A),'native'),2)
toc

tic
D = bitand(sum(uint32(A),'native'),1)
toc

sum的native选项允许您在结果中保留参数的类型。

答案 1 :(得分:1)

除了@ClementJ所说的,我试过

tic
E = A(1)
for i = 2:numel(A)
    E = xor(y, A(i));
end
E
toc

希望加速器有所帮助,但它没有(太多),并且

tic
F = num2cell(A);
F = xor(F{:})
toc

实际上不起作用,因为XOR只允许2个输入。

MATLAB的双精度​​矢量算法的速度和它一样快,所以你可能无法做得更好。如果这真的推动了你的表现,那么我建议写一个C-MEX功能:应该很容易。