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
如果 x
是 double
数据类型,允许一些 公差 可能更好,比如 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
我需要一种方法来测试向量中的所有元素是否都相同
在我的脚本中,我从一个空向量和一个将元素附加到向量的函数开始。我事先不知道该功能将给我什么价值。我在每次迭代时迭代并向向量附加一个元素。只要追加的每个新元素都与之前的元素相同,就应该继续迭代。一旦函数 returns 有不同的值,while 循环就会中断。
基本上,我需要做的是测试向量中的所有元素是否相同,一般来说,作为函数 returns 不同的值。我试过使用 strcmp,但是,它给我一个关于维度不匹配的错误。
提前致谢! V.Vocor
有很多方法可以测试向量或数组 x
是否包含 严格 相等的元素。这里有一些。请注意 (:)
仅在处理多维数组时才有必要;对于矢量,您可以删除它:
all(x(1)==x(:))
max(x(:))==min(x(:))
all(diff(x(:)))==0
numel(unique(x(:)))==1
如果 x
是 double
数据类型,允许一些 公差 可能更好,比如 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