2015-05-03 30 views
0

我正在讀取Matlab中的phytree函數(code here)。下面的代碼混淆了我。矩陣B是大小爲(n-1)*2的輸入矩陣,其中n是樹葉的數量。在這裏,B指示如何創建phytree:第i行對應於第i個分支,它是第i個分支的兩個孩子。任何人都可以告訴我爲什麼我們需要檢查下面的第一個條件?爲什麼我們需要在Matlab中創建phytree時檢查條件

% test B 
if sum(diff(sort(B(:)))~=1) || (min(B(:))~=1) 
    error('Bioinfo:phytree:IncompleteTree','Branch architecture is not complete') 
end 

回答

2

讓我們來分解它。

  1. sort(B(:))返回B升序的元素的列向量。參見:sort
  2. diff(sort(B(:)))返回步驟1後續元素之間的差異向量。請參閱:diff
  3. diff(sort(B(:)))~=1返回logical值的矢量:false0)如果來自步驟2的差值結果是1true1)其他。參見:logical operations
  4. sum(diff(sort(B(:)))~=1)將來自步驟3的值的向量相加logical。如果所有值都是false0),則總和應爲零。如果不是,則會觸發錯誤。參見:sum

換句話說,這個語句檢查B中的索引間隔相等。第二條語句min(B(:))~=1檢查最小索引是1。因此,B必須包含從1numel(B)的整數。這是由函數本身定義的要求,並在幫助中詳細說明。

相關問題