Octave/Matlab - 向量中的所有元素都相同吗?

Octave/Matlab - Are all elements in the vector the same?

我需要一种方法来测试向量中的所有元素是否都相同

在我的脚本中,我从一个空向量和一个将元素附加到向量的函数开始。我事先不知道该功能将给我什么价值。我在每次迭代时迭代并向向量附加一个元素。只要追加的每个新元素都与之前的元素相同,就应该继续迭代。一旦函数 returns 有不同的值,while 循环就会中断。

基本上,我需要做的是测试向量中的所有元素是否相同,一般来说,作为函数 returns 不同的值。我试过使用 strcmp,但是,它给我一个关于维度不匹配的错误。

提前致谢! V.Vocor

有很多方法可以测试向量或数组 x 是否包含 严格 相等的元素。这里有一些。请注意 (:) 仅在处理多维数组时才有必要;对于矢量,您可以删除它:

  • all(x(1)==x(:))
  • max(x(:))==min(x(:))
  • all(diff(x(:)))==0
  • numel(unique(x(:)))==1

如果 xdouble 数据类型,允许一些 公差 可能更好,比如 tol = 1e-6。那么:

  • all(abs(x(1)-x(:))<=tol)
  • max(x(:))-min(x(:))<=tol

如果您在每次迭代时迭代并向向量追加一个值,并且如果您在追加的值与之前的所有值不同时中断 for 循环,那么一旦 return值和之前的不一样

因此,与向量上的最后一个元素(不是整个向量)相比,它的效率要高得多。更好的是,由于附加到向量的末尾是一项非常昂贵的操作(它需要将整个向量复制到内存中),因此删除向量并仅在内存中保留一个标量元素。像这样:

n = uint32 (0);
current = init_value;
while (current == foo ())
  n++;
endwhile