matlab/octave 使用字典顺序比较向量?
matlab/octave compare vectors using dictionary order?
Octave 中是否有简洁的方法使用字典顺序(词典顺序)比较两个向量?
即我想通过第一个元素比较两个向量 a
, b
,如果它们不同则结果 return ;否则比较第二个元素,依此类推..
例如,如果a = [0 1 5]
,b = [0 2 1]
,我想要
a <? b
对于某些 operator/function <?
到 return 正确。
如果我简单地执行 a < b
,这将 return 一个逻辑值向量。
ans =
0 1 0
在 Octave 中你可以使用 issorted:
result = ~isequal(a,b) && issorted([a;b],'rows');
在 MATLAB 中您可以使用 issortedrows:
result = issortedrows([a;b],'strictascend')
找到第一个不相等的索引。然后,在指定的索引中进行比较。
idx = find(a ~= b);
result = a(idx(1)) < b(idx(1)); % if length(idx) > 0
以下内容适用于 MATLAB 和 Octave...
您可以像这样创建一个 comparison function using find
:
lexlt = @(a, b) find([a < b true], 1) < find([a > b true], 1);
如果第一个向量参数在词法上小于第二个,则 return 为真,否则为假(如果大于或等于第二个)。例如:
>> 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
这里是 "greater than" 比较的相应函数(即第一个参数在字典上大于第二个):
lexgt = @(a, b) find([a > b true], 1) < find([a < b true], 1);
Octave 中是否有简洁的方法使用字典顺序(词典顺序)比较两个向量?
即我想通过第一个元素比较两个向量 a
, b
,如果它们不同则结果 return ;否则比较第二个元素,依此类推..
例如,如果a = [0 1 5]
,b = [0 2 1]
,我想要
a <? b
对于某些 operator/function <?
到 return 正确。
如果我简单地执行 a < b
,这将 return 一个逻辑值向量。
ans =
0 1 0
在 Octave 中你可以使用 issorted:
result = ~isequal(a,b) && issorted([a;b],'rows');
在 MATLAB 中您可以使用 issortedrows:
result = issortedrows([a;b],'strictascend')
找到第一个不相等的索引。然后,在指定的索引中进行比较。
idx = find(a ~= b);
result = a(idx(1)) < b(idx(1)); % if length(idx) > 0
以下内容适用于 MATLAB 和 Octave...
您可以像这样创建一个 comparison function using find
:
lexlt = @(a, b) find([a < b true], 1) < find([a > b true], 1);
如果第一个向量参数在词法上小于第二个,则 return 为真,否则为假(如果大于或等于第二个)。例如:
>> 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
这里是 "greater than" 比较的相应函数(即第一个参数在字典上大于第二个):
lexgt = @(a, b) find([a > b true], 1) < find([a < b true], 1);