我有两个大数组,大约有1000行和1000列我需要比较这些数组的每个元素,如果相应的元素相等,则将1存储在另一个数组中。
我可以用for循环来完成,但这需要很长时间。我怎么能做得更快?

最佳答案

给出的答案都是正确的我只是想详细说明一下关于浮点测试的注释。
比较浮点数是否相等时,必须使用公差值通常使用两种类型的公差比较:绝对公差和相对公差(gnovice's
ab的绝对公差比较如下:

|a-b| < tol

相对公差比较如下:
|a-b| < tol*max(|a|,|b|) + tol_floor

您可以将上述两个函数实现为匿名函数:
%# absolute tolerance equality
isequalAbs = @(x,y,tol) ( abs(x-y) <= tol );

%# relative tolerance equality
isequalRel = @(x,y,tol) ( abs(x-y) <= ( tol*max(abs(x),abs(y)) + eps) );

然后可以将它们用作:
%# let x and y be scalars/vectors/matrices of same size
x == y
isequalAbs(x, y, 1e-6)
isequalRel(x, y, 1e-6)

09-04 18:04