matlab / octave使用字典顺序比较向量?

时间:2017-11-01 14:30:39

标签: matlab vector octave lexicographic-ordering

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

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

例如,如果a = [0 1 5]b = [0 2 1],我想要

a <? b

使某些运算符/函数<?返回true。

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

ans =

  0  1  0

3 个答案:

答案 0 :(得分:2)

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

您可以使用comparison function创建find,如下所示:

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);

答案 1 :(得分:1)

在Octave中,您可以使用issorted

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

在MATLAB中,您可以使用issortedrows

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

答案 2 :(得分:0)

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

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