我正在阅读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
答案 0 :(得分:2)
让我们解决这个问题。
sort(B(:))
以升序返回B
元素的列向量。请参阅:sort
。diff(sort(B(:)))
会返回步骤1的后续元素之间的差异向量。请参阅:diff
。diff(sort(B(:)))~=1
或logical
,则false
会返回0
值的向量:1
(true
) (1
)其他。请参阅:logical operations。sum(diff(sort(B(:)))~=1)
对来自步骤3的logical
值的向量求和。如果所有值均为false
(0
),则总和应为零。如果不是,则会触发错误。请参阅:sum
。换句话说,此语句检查B
中的索引是否等于1。第二个语句min(B(:))~=1
检查最小索引是否为1。因此,B
必须包含1
到numel(B)
的整数。这是由函数本身定义的要求,并在帮助中详细说明。