0

我对 Matlab 很陌生,现在我想用 matlab 做一些聚类工作。如果我有 3 列值

id1 id2 distvalue1

id1 id3 distvalue2 ....

id2 id4 distvalue i .....

总共 5000 个 id,但一些 id 对缺少 python 中的距离值我可以制作循环将这些距离值导入矩阵形式。我怎么能在matlab中做到这一点?并让 matlab 知道 id1,...idx 是标识,第三列是值

谢谢!

4

1 回答 1

0

根据评论,您知道如何将数据转换为 N x 3 矩阵的形式,称为 X,其中X(:,1)是第一个索引,X(:,2)是第二个索引,X(:,3)是对应的距离。

假设索引 (id1...idx) 是任意数字标签。

那么我们可以执行以下操作:

% First, build a list of all the unique indices    
indx = unique([X(:,1); X(:,2)]);
Nindx = length(indx);

% Second, initialize an empty connection matrix, C
C = zeros(Nindx, Nindx);  %or you could use NaN(Nindx, Nindx)

% Third, loop over the rows of X, and map them to points in the matrix C
for n = 1:size(X,1)
     row = find(X(n,1) == indx);
     col = find(X(n,2) == indx);
     C(row,col) = X(n,3);
end

这不是最有效的方法(即以矢量化方式将 X 的索引重新映射到范围 [1...Nindx]),但对于 5000 个 id 应该没问题。

如果您最终要处理大量的唯一索引,其中只有极少数索引对分配了距离值,那么您可能需要考虑使用稀疏矩阵 - 尝试help sparse- 而不是预先分配一个大的零矩阵。

于 2013-05-31T23:35:35.983 回答