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

Matlab 两个向量之间冲突符号的计数,matlab,matrix,vector,matrix-multiplication,Matlab,Matrix,Vector,Matrix Multiplication,我有两个向量(实际上是1xN矩阵),它们的数字在[-1,1]之间。我想找出两个对应元素的符号不相同的实例数(符号(A[k])~=sign(B[k]))。有没有一种方法比在两个向量上迭代更有效?在评论中发布的两种解决方案对于非时间关键的计算同样有效: sum(符号(A)~=符号(B))- 如果你觉得好玩:nnz(A.*Bsum(符号(A)~=符号(B))?如果你觉得好玩:nnz(A)*B@LuisMendo这是相当模糊的:A=(A+1)/2;B=(B+1)/2;C=accumarray([A(:)

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

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

sum(符号(A)~=符号(B))
-


如果你觉得好玩:
nnz(A.*B
sum(符号(A)~=符号(B))
?如果你觉得好玩:
nnz(A)*B@LuisMendo这是相当模糊的:
A=(A+1)/2;B=(B+1)/2;C=accumarray([A(:)+1b(:)+1],1);out=C(2)+C(3)
远没有你的和迪瓦卡的那么有效,但这只是完全炸毁这个评论流的另一种方式。@LuisMendo-hehehe我知道。基本上我所做的是统计
[-1,1],[1,-1],-1,-1]
[1,1]的组合
A
B
之间,然后将
[-1,1]
[1,-1]
的出现情况汇总在一起。@rayryeng当你有一把大锤时,一切看起来都像钉子!
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;