我有这个数据集,其格式为
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万。
答案 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);