簡體   English   中英

matlab / octave比較向量使用字典順序?

[英]matlab/octave compare vectors using dictionary order?

在Octave中,是否有簡潔的方法可以使用字典順序(字典順序)比較兩個向量?

即我想通過第一個元素比較兩個向量ab ,如果它們不同則返回結果; 否則比較第二個元素,依此類推。

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

a <? b

對於某些操作員/功能<? 返回true。

如果我只是簡單地執行a < b ,這將返回邏輯值的向量。

ans =

  0  1  0

以下內容適用於MATLAB和Octave ...

您可以使用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);

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM