我有两个大约 1000 行和 1000 列的大数组。我需要比较这些数组的每个元素,如果相应的元素相等,则将 1 存储在另一个数组中。
我可以用 for 循环来做到这一点,但这需要很长时间。我怎样才能更快地做到这一点?
给出的答案都是正确的。我只是想详细说明新手的 https://stackoverflow.com/questions/2202641/comparing-all-elements-of-two-arrays-in-matlab/2202651#2202651关于浮点测试的评论。
比较浮点数是否相等时,需要使用容差值。常用的公差比较有两种:绝对公差和相对公差。 (source http://www.mathworks.com/matlabcentral/fileexchange/22846/content/matlab_xunit/doc/html/exTolerance.html)
绝对公差比较a
and b
好像:
|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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)