【问题标题】:matlab/octave compare vectors using dictionary order?matlab/octave 使用字典顺序比较向量?
【发布时间】:2017-11-01 14:30:39
【问题描述】:

Octave 中是否有一种简洁的方法可以使用字典顺序(字典顺序)比较两个向量?

即我想比较两个向量 ab 的第一个元素,如果它们不同则返回结果;否则比较第二个元素,依此类推..

比如a = [0 1 5],b = [0 2 1],我想有

a <? b

对于某些运算符/函数 &lt;? 返回 true。

如果我只是做a &lt; b,这将返回一个逻辑值向量。

ans =

  0  1  0

【问题讨论】:

  • 如果要测试所有元素是否相等:all(a == b)
  • @Naveh 谢谢,但我想按字典顺序回答哪个向量更大。

标签: matlab vector octave lexicographic-ordering


【解决方案1】:

以下内容适用于 MATLAB 和 Octave...

您可以像这样使用find 创建comparison function

lexlt = @(a, b) find([a < b true], 1) < find([a > b true], 1);

如果第一个向量参数在字典上小于第二个,它将返回 true,否则返回 false(如果它大于或等于它)。例如:

>> a = [0 1 5];
>> b = [0 2 1];
>> lexlt(a, a)

ans =

  logical

   0

>> lexlt(a, b)

ans =

  logical

   1

>> lexlt(b, a)

ans =

  logical

   0

这是“大于”比较的对应函数(即第一个参数在字典上大于第二个):

lexgt = @(a, b) find([a > b true], 1) < find([a < b true], 1);

【讨论】:

    【解决方案2】:

    在 Octave 中,您可以使用 issorted:

    result = ~isequal(a,b) && issorted([a;b],'rows');
    

    在 MATLAB 中你可以使用issortedrows:

    result = issortedrows([a;b],'strictascend')
    

    【讨论】:

      【解决方案3】:

      找到它们不相等的第一个索引。然后,在指定的索引中进行比较。

      idx = find(a ~= b);
      result = a(idx(1)) < b(idx(1)); % if length(idx) > 0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-16
        • 1970-01-01
        • 2023-03-29
        • 2015-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多