【问题标题】:How to check if the beginning elements of array in matlab is the same如何检查matlab中数组的起始元素是否相同
【发布时间】:2014-07-15 07:13:15
【问题描述】:

我想看看一个数组是否以与另一个数组相同的元素开始,而不必编写一堆单独遍历每个元素的 for 循环。

例如,如果我有下面的数组

Array1 = [1 2 3 4]
Array2 = [1 2 3 4 5 3 2 5 7]

Array3 = [1 2 3 5]

然后比较 Array1 和 Array2 将返回 true。 并且比较 Array3 和 Array2 会返回 false。

有什么快速简便的方法可以做到这一点。我不知道要比较的数组的长度。我要比较的元素数等于最短向量的长度。

谢谢!

【问题讨论】:

  • 前几个元素必须相等?

标签: matlab


【解决方案1】:

您可以使用isequal 检查两个向量中的所有元素是否相同。只检查前n个元素,你可以Array(1:n),这样整个函数就是这样的:

Array1 = [1 2 3 4]
Array2 = [1 2 3 4 5 3 2 5 7]
Array3 = [1 2 3 5]

n = 4;    % Compare the first n elements
isequal(Array1(1:n), Array2(1:n))
ans =  1

isequal(Array2(1:n), Array3(1:n))
ans = 0

如果您使用Array1(1:n) == Array2(1:n),您将得到一个分段比较结果1 1 1 1。当然,这意味着你也可以这样做:

all(Array1(1:n) == Array2(1:n))
ans =  1

all(Array2(1:n) == Array3(1:n))
ans =  0

如果您希望 n 成为最小向量中的元素数(根据您的评论),如 ChrisBen 解释问题,您可以这样解决:

isequal(Array1(min([numel(Array1) numel(Array2)])), Array2(min([numel(Array1) numel(Array2)])))

或者更干净一点:

n = min([numel(Array1) numel(Array2)])
isequal(Array1(1:n), Array2(1:n))

【讨论】:

    【解决方案2】:

    这是一个函数,它将比较任意两个向量的初始段,直到最短向量的长度。如果它们相同则返回true,如果不相同则返回false

    注意

    1. 它只适用于向量,而不适用于矩阵(尽管您可以扩展它以处理矩阵)
    2. 如果有任何条目是NaN,那么它将始终返回false,因为NaN == NaNfalse

    在这里-

    function result = equal_initial_segment(x, y)
    
      N = min(length(x), length(y));
    
      result = isequal(x(1:N), y(1:N));
    
    end
    

    【讨论】:

      【解决方案3】:

      您似乎只是将较短列表的所有元素与较长列表的第一个元素进行比较,在这种情况下您可以这样做:

      function same = compareLists(list1, list2)
          if length(list1) > length(list2)
               same = isequal(list2, list1(1:length(list2));
          else if
               same = isequal(list1, list2(1:length(list1));
          end
      end
      

      【讨论】:

        【解决方案4】:

        您可以为此使用strmatch

        ~(isempty(strmatch(Array1, Array2)) && isempty(strmatch(Array2, Array1)))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-04
          • 2011-01-19
          • 1970-01-01
          • 2012-08-22
          • 1970-01-01
          • 2014-07-29
          • 2012-08-21
          • 1970-01-01
          相关资源
          最近更新 更多