计算两个向量之间冲突符号的数量
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
秒。
我有两个向量(实际上是 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
秒。