为什么我们需要在Matlab中创建phytree时检查条件

时间:2015-05-03 17:33:03

标签: matlab

我正在阅读Matlab中的phytree函数(code here)。下面的代码让我很困惑。矩阵B是大小为(n-1)*2的输入矩阵,其中n是叶数。这里,B表示如何创建植树树:第i行对应于第i个分支,第i个分支是第i个分支的两个子分支。谁能告诉我为什么我们需要检查下面的第一个条件?

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

1 个答案:

答案 0 :(得分:2)

让我们解决这个问题。

  1. sort(B(:))以升序返回B元素的列向量。请参阅:sort
  2. diff(sort(B(:)))会返回步骤1的后续元素之间的差异向量。请参阅:diff
  3. 如果第2步的差异结果为diff(sort(B(:)))~=1logical,则
  4. false会返回0值的向量:1true) (1)其他。请参阅:logical operations
  5. sum(diff(sort(B(:)))~=1)对来自步骤3的logical值的向量求和。如果所有值均为false0),则总和应为零。如果不是,则会触发错误。请参阅:sum
  6. 换句话说,此语句检查B中的索引是否等于1。第二个语句min(B(:))~=1检查最小索引是否为1。因此,B必须包含1numel(B)的整数。这是由函数本身定义的要求,并在帮助中详细说明。