根据给定数据定义矩阵
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);
我有这个数据集,它的形式是
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);