matlab中点间距的计算
很难理解以下在Matlab中计算两点之间欧氏距离的代码,其中X是要分类的数据,标签对应于聚类成员matlab中点间距的计算,matlab,k-means,euclidean-distance,Matlab,K Means,Euclidean Distance,很难理解以下在Matlab中计算两点之间欧氏距离的代码,其中X是要分类的数据,标签对应于聚类成员 label = ones(1, data_dim); [N,~]=size(X); [c,~]=size(clusters); dist = zeros(N,c); for i = 1:c dist(:,i) = sum(bsxfun(@minus, X, clusters(i,:)).^2, 2); end [~,label] = min(dist,[],2); 有人能解释一下这里发生
label = ones(1, data_dim);
[N,~]=size(X);
[c,~]=size(clusters);
dist = zeros(N,c);
for i = 1:c
dist(:,i) = sum(bsxfun(@minus, X, clusters(i,:)).^2, 2);
end
[~,label] = min(dist,[],2);
有人能解释一下这里发生了什么,或者不使用bsxfun
就可以从第一原理来解释吗?
循环迭代for
集群中的每一行。每一行大概是该簇中一个点的坐标李>
从X中的每一行减去特定的集群行。换句话说,它输出一个矩阵,其中第一行是bsxfun(@减号,X,clusters(i,:)
,第二行是X(1,:)-clusters(i,:)
等。这就像是从X(2,:)-clusters(i,:)
中的每个点到特定簇点X
的方向向量i
- 每个值都是平方(
),然后沿每行求和(^2
)。这将为您提供一个列向量,其中包含从求和(…,2)
中的每个点到簇点的欧几里德距离的平方。它存储在矩阵“dist”中,因此包含从X中的每个点到X
簇中的每个点的距离的平方
命令在min(dist,[],2)
的每列上查找这些值的最小值,即在dist
中查找每个点的最小距离。但是,实际值被忽略,而索引存储在x
中-此索引对应于具有最小距离的簇标签