【问题标题】:How to check if all of the elements in an array are the same, in matlab?如何在matlab中检查数组中的所有元素是否相同?
【发布时间】:2012-05-04 17:03:17
【问题描述】:

必须有一个简单的 matlab 方法来执行此操作。我有一个行向量,我想检查所有元素是否相等。在循环中强制执行此操作很容易,但要寻找更有效的方法:) 元素是整数

【问题讨论】:

  • 矩阵有多大?

标签: matlab


【解决方案1】:

您甚至不需要上述解决方案中的all,只需if v == v(1)

【讨论】:

  • 如果您尝试在此条件和其他布尔表达式之间进行逻辑组合(&&||),则需要 all
【解决方案2】:

怎么样:max(v) == min(v)? :-)

【讨论】:

  • 这可行,但我希望它比公认的解决方案慢。
  • @m7913d 我查过了。这个答案和上面的一样快。
【解决方案3】:

另一种解决方案:

sum(abs(diff(v))) == 0

【讨论】:

    【解决方案4】:

    另一种解决方案:

    numel(unique(v))==1
    

    【讨论】:

    • @Alex:对于理论上不正确但在实践中有用的“作品”的有用值。
    【解决方案5】:

    我觉得可以这么简单

    if all(v == v(1))
    

    另一种方法是

    if range(v) == 0
    

    【讨论】:

    • @reve_etrange - 因为您误解了这个问题。 isequal 测试两个数组是否相同。请按照要求重新阅读问题。它询问 SINGLE 数组的所有元素是否彼此相等。
    • 请注意,这两种方法都只适用于一维数组(如问题所要求的那样)。要修改它以适用于任何大小的数组,只需调用if all(v(:)==v(1))
    • 另外值得注意的是,这两种建议的方法对于包含 NaN 值的数组会给出不同的结果 >> all([3 NaN 3]==3) ans = 0 >> range([3 NaN 3] )==0 答案 = 1
    • any(v ~= v(1)) 会更快吗?它可能只需要检查直到找到第一个真实案例......虽然我不确定matlab是否真的以这种顺序方式工作。
    • @Giuseppe: all 只需要检查,直到找到第一个错误案例。反转测试没有任何好处。
    猜你喜欢
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    相关资源
    最近更新 更多