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

Counting number of conflicting signs between two vectors

我有两个向量(实际上是 1xN 矩阵),它们的数字介于 [-1, 1] 之间。我想找到两个对应元素的符号不相同的实例数 (sign(A[k]) ~= sign(B[k]))。有没有比迭代两个向量更有效的方法?

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

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

If you're feeling playful: nnz(A.*B<0) --

但非游戏版本 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;

对于符号和版本,计算时间为 18.95 秒;对于 A.*B 版本,它是 47.70 秒。