计算两个向量之间冲突符号的数量

时间:2015-02-19 22:13:43

标签: matlab matrix vector matrix-multiplication

我有两个数字在[-1,1]之间的向量(实际上是1xN矩阵)。我想找到两个对应元素的符号不相同的实例数(符号(A [k])〜=符号(B [k]))。有没有办法做到这一点比仅仅迭代两个向量更有效?

1 个答案:

答案 0 :(得分:0)

评论中发布的两个解决方案同样适用于非时间关键型计算:

  

sum(sign(A) ~= sign(B)) - Divakar

     

如果您感觉好玩:nnz(A.*B<0) - Luis Mendo

但非玩耍版本sum(sign(A) ~= sign(B))似乎更快,可能是因为它避免了A.*B中涉及的乘法。我把它们比作这样:

Reps = 1e7; 
n = 10;
tic;
for i=1:Reps
  A = rand(1,n)-.5;
  B = rand(1,n)-.5;
  differ = sum(sign(A) ~= sign(B));   % or nnz(A.*B<0);
end
toc;

对于sum-of-signs版本,计算时间为18.95秒;对于A.*B版本,它是47.70秒。