我有一个如下形式的数据集
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
我想定义一个MxM的矩阵C,其中包含C[u,u] = C[v,v] = 1
和 C[u,v] = C[v,u] = -1
,对于数据集中每个条目(u,v,-1)
,我该如何在Matlab中实现?由于M非常大,矩阵C可以是稀疏的,最大可达100万。
回答:
您可以使用sparse
函数为您的数据设置一个名为A
的稀疏矩阵:
M = 1e6; % 给定值 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 -1125 126 -1127 126 -1128 126 -1129 126 -1143 131 -1188 184 -1];
我们将(i,i)
添加到A
中,值为1,然后从这些值创建一个稀疏矩阵。