Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MATLAB中从树状图中找到祖先节点和父节点_Matlab_Dendrogram - Fatal编程技术网

如何在MATLAB中从树状图中找到祖先节点和父节点

如何在MATLAB中从树状图中找到祖先节点和父节点,matlab,dendrogram,Matlab,Dendrogram,我在MATLAB中得到了一个连杆算法的输出Z 输出Z的结构在此链接中给出(向下滚动到输出) 我试图找到树状图内部节点和叶子的系谱。谱系定义为连接叶i(内部节点α_h)和根α_1的内部节点的有序集合。我还希望能够找到父节点-这是v的节点w,其中w在从根到v的路径上紧跟在v之前。有人愿意解释一下我是如何使用MATLAB实现这一点的吗 如果我的定义不够清晰,图中会显示一个示例 叶3的系谱为G(3)={α7,α2,α1},内部节点α7的系谱为G(α7)={α7,α2,α1}。父节点的示例:α_7的父节

我在MATLAB中得到了一个连杆算法的输出Z

输出Z的结构在此链接中给出(向下滚动到输出)

我试图找到树状图内部节点和叶子的系谱。谱系定义为连接叶i(内部节点α_h)和根α_1的内部节点的有序集合。我还希望能够找到父节点-这是v的节点w,其中w在从根到v的路径上紧跟在v之前。有人愿意解释一下我是如何使用MATLAB实现这一点的吗

如果我的定义不够清晰,图中会显示一个示例

叶3的系谱为G(3)={α7,α2,α1},内部节点α7的系谱为G(α7)={α7,α2,α1}。父节点的示例:α_7的父节点是α_2,我将其表示为g(α_2)=α_7。我知道,给定层次聚类的输出Z,树的索引与图像不同,因此,一个与树状图的索引方式一致的代码是绝对正确的。我只关心树状图的输出是否正确


我希望现在可以更清楚地了解我希望代码使用Z的输入查找和执行的操作。非常感谢您的帮助

一个小例子可以让事情变得更清楚:

X = [1,2,4,5,8]';    
D = pdist(X);
L = linkage(D, 'ward');
dendrogram(L, 'labels', cellfun(@num2str, num2cell(X), 'uniform', false));
如果在L中添加第四列

L(:, end+1) = (size(L, 1) + (1 : size(L, 1)));
然后,L的每一行都有条目[“节点数”、“节点数”、“在级别合并”、“父节点数”]

所以根节点总是L(end,end),左节点有一个最大大小的数字(X,1),内部节点的数字大于大小(X,1)

在您的示例中,L大致如下所示:

L = [...
    9, 10, 1, 10; % 10 = alpha_9
    5,  6, 2, 11; % 11 = alpha_8
    3,  4, 3, 12; % 12 = alpha_7
    1,  2, 4, 13; % 13 = alpha_6
    7, 12, 5, 14; % 14 = alpha_5
    8, 15, 6, 15; % 15 = alpha_4
   16, 11, 7, 16; % 16 = alpha_3
   14, 13, 8, 17; % 17 = alpha_2
   18, 17, 9, 18; % 18 = alpha_1
   ];
dendrogram(L);

请注意,标签的构造已经是正确的。

一个小例子可以让事情更清楚:

X = [1,2,4,5,8]';    
D = pdist(X);
L = linkage(D, 'ward');
dendrogram(L, 'labels', cellfun(@num2str, num2cell(X), 'uniform', false));
如果在L中添加第四列

L(:, end+1) = (size(L, 1) + (1 : size(L, 1)));
然后,L的每一行都有条目[“节点数”、“节点数”、“在级别合并”、“父节点数”]

所以根节点总是L(end,end),左节点有一个最大大小的数字(X,1),内部节点的数字大于大小(X,1)

在您的示例中,L大致如下所示:

L = [...
    9, 10, 1, 10; % 10 = alpha_9
    5,  6, 2, 11; % 11 = alpha_8
    3,  4, 3, 12; % 12 = alpha_7
    1,  2, 4, 13; % 13 = alpha_6
    7, 12, 5, 14; % 14 = alpha_5
    8, 15, 6, 15; % 15 = alpha_4
   16, 11, 7, 16; % 16 = alpha_3
   14, 13, 8, 17; % 17 = alpha_2
   18, 17, 9, 18; % 18 = alpha_1
   ];
dendrogram(L);

请注意,标签的结构已经正确。

对于迟交的回复,我深表歉意。啊,我现在明白了。因此,对于系谱,我现在只需要搜索L的增强版本的最后一列,因为前一个父节点的父节点将位于相应叶节点的系谱中?是的,没错。如果我的回答能回答你的问题,你能接受吗?谢谢:-)是的,我现在就接受。谢谢你的帮助!对迟来的答复表示歉意。啊,我现在明白了。因此,对于系谱,我现在只需要搜索L的增强版本的最后一列,因为前一个父节点的父节点将位于相应叶节点的系谱中?是的,没错。如果我的回答能回答你的问题,你能接受吗?谢谢:-)是的,我现在就接受。谢谢你的帮助!