根据给定数据定义矩阵

Defining a matrix based on given data

我有这个数据集,它的形式是

    14     2    -1
    18     2    -1
    63    58    -1
    69    58    -1
   125   126    -1
   127   126    -1
   128   126    -1
   129   126    -1
   143   131    -1
   188   184    -1

我想定义一个矩阵 C,它是 MxM,它由 C[u,u] = C[v,v] = 1 中的 1 和数据集中每个条目 (u,v,-1)C[u,v] = C[v,u] = -1 组成,我如何在 matlab 中执行此操作?矩阵C可以是稀疏的,因为M很大,可以达到100万

您可以使用 sparse:

为您的数据设置称为 A 的稀疏矩阵
  M = 1e6; % given value
  A = [A; A(:, [2 1 3]); [1:M].' [1:M].' ones(M,1)];    %(u,v) = (v,u) = -1, and (u , u) = 1 
  C = sparse(A(:,1),A(:,2),A(:,3),M,M);

在上面如果:

A = 
[14     2    -1
 18     2    -1
 63    58    -1
 69    58    -1
125   126    -1
127   126    -1
128   126    -1
129   126    -1
143   131    -1
188   184    -1];

我们将 (i,i) 添加到值为 1 的 A 中,然后根据这些值创建一个稀疏矩阵。

如果你的原始列表是一个矩阵A:

A = [14     2    -1
    18     2    -1
    63    58    -1
    69    58    -1
   125   126    -1
   127   126    -1
   128   126    -1
   129   126    -1
   143   131    -1
   188   184    -1]

M = max(A(:)); % or whatever size you want, this is the minimum size
% matrix with ones on the diagonal.
C = diag(ones(M,1)); % you can cast it with sparse() if you want to
% set coordinates to -1 or whatever is in A(:,3)
C(sub2ind(size(C), A(:,1), A(:,2))) = A(:,3);