我对 Matlab 很陌生,现在我想用 matlab 做一些聚类工作。如果我有 3 列值
id1 id2 distvalue1
id1 id3 distvalue2 ....
id2 id4 distvalue i .....
总共 5000 个 id,但一些 id 对缺少 python 中的距离值我可以制作循环将这些距离值导入矩阵形式。我怎么能在matlab中做到这一点?并让 matlab 知道 id1,...idx 是标识,第三列是值
谢谢!
我对 Matlab 很陌生,现在我想用 matlab 做一些聚类工作。如果我有 3 列值
id1 id2 distvalue1
id1 id3 distvalue2 ....
id2 id4 distvalue i .....
总共 5000 个 id,但一些 id 对缺少 python 中的距离值我可以制作循环将这些距离值导入矩阵形式。我怎么能在matlab中做到这一点?并让 matlab 知道 id1,...idx 是标识,第三列是值
谢谢!
根据评论,您知道如何将数据转换为 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
- 而不是预先分配一个大的零矩阵。