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