创建一个只包含单个值的数组

3

我正在使用Matlab,想要检查一个列向量是否与另一个列向量精确到小数点后三位相等。为了实现这个目标,我尝试创建一个由0.001组成的数组,并检查它是否大于或等于该列向量。请问是否有比使用for循环创建这个数组更简单的方法?

4个回答

10

有没有比for循环更简单的方法来创建这个数组?

是的,使用:

ones(size, 1) * myValue

例如

>> ones(5,1)*123

ans =

   123
   123
   123
   123
   123

4

如果我理解正确的话,您有两个向量a和b,每个向量都有N个元素。您希望检查对于每个i(i <=N),是否满足abs(a(i)-b(i)) <= 0.001。

如果是这样,请执行以下操作:

vector_match = all(abs(a-b) <= 0.001);

vector_match 是一个布尔值。


1

例子:

a = rand(1000,1);
b = rand(1000,1);

idx = ( abs(a-b) < 0.001 );
[a(idx) b(idx)]

» ans =
       0.2377      0.23804
       0.0563     0.056611
      0.01122     0.011637
        0.676       0.6765
      0.61372      0.61274
      0.87062      0.87125

0
您可以考虑使用“查找”命令,例如:
a = [ 0.005, -0.003 ];
x = find(a > 0.001);

就我个人而言,我发现在MATLAB中比较数字绝对是一场噩梦,但我也刚接触不久。重点是,当你进行比较时,可能会遇到浮点数比较问题,因此在尝试任何操作时要牢记这一点(如果我说错了或者有更好的解决方法,请大家指正)。


1
为了解决比较问题,您可以使用 eps。一般来说,浮点数比较会影响所有语言,而不仅仅是MATLAB。您可以阅读一些关于数值方法的资料,因为在大量操作后,数值误差可能会累积。例如,在某些情况下,它是 sqrt(eps) - rwong
@wrong:当然,我知道 eps,也知道浮点数比较,但是 eps 并不总是有用的。谢谢。 - Noon Silk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接