[英]matlab/octave compare vectors using dictionary order?
在Octave中,是否有簡潔的方法可以使用字典順序(字典順序)比較兩個向量?
即我想通過第一個元素比較兩個向量a
, b
,如果它們不同則返回結果; 否則比較第二個元素,依此類推。
例如,如果a = [0 1 5]
, b = [0 2 1]
,我想
a <? b
對於某些操作員/功能<?
返回true。
如果我只是簡單地執行a < b
,這將返回邏輯值的向量。
ans =
0 1 0
以下內容適用於MATLAB和Octave ...
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);
在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.