【问题标题】:Fast xor array in matlabmatlab中的快速异或数组
【发布时间】:2011-10-11 20:48:50
【问题描述】:

还有比这更胖的方法来对矩阵的每一列进行异或吗?

mod(sum(matrix),2)

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

更新:

根据this source 的说法,对 uint 求和比对双精度求和要慢,因为它涉及最大裁剪和其他原因。 另外,请注意求和逻辑(使用'native')在 1 处停止。

【问题讨论】:

  • xor 函数?你能详细说明一下吗?
  • @reve_etrange,我正在寻找的是对数组 A 的元素进行异或运算:A(1) xor A(2) xor ... xor A(n)。 Matlab 的 xor(A,B) 不这样做。
  • 如果你想快点,我会写一个 mex 函数来做。

标签: matlab xor


【解决方案1】:

我试图避免转换为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 选项允许您在结果中保留参数的类型。

【讨论】:

    【解决方案2】:

    除了@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 函数:应该很容易。

    【讨论】:

      猜你喜欢
      • 2011-12-17
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      • 2011-01-31
      相关资源
      最近更新 更多