根据给定数据定义矩阵

时间:2017-07-19 12:16:41

标签: matlab matrix machine-learning sparse-matrix

我有这个数据集,其格式为

    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和C[u,v] = C[v,u] = -1组成,对于我的数据集中的每个条目(u,v,-1),我该如何在matlab中执行此操作?矩阵C可以是稀疏的,因为M非常大,可能高达100万。

2 个答案:

答案 0 :(得分:3)

您可以使用A设置名为sparse的数据的稀疏矩阵:

  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);

在上面的if:

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中,然后根据这些值创建稀疏矩阵。

答案 1 :(得分:2)

如果您的原始列表是矩阵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);