对于矩阵的每一列而言,是否有一种比这更有效的方法呢?
mod(sum(matrix),2)
它从逻辑转换为double并使用昂贵的模数。
更新
根据this source,求和uint比求和双倍更慢,因为它涉及最大限幅和其他原因。
另请注意,求和逻辑('native'
)在1处停止。
答案 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功能:应该很容易。