在Octave中构造一个矩阵

时间:2015-03-29 01:29:31

标签: matrix octave construction

我有一个向量idx = [3; 5; 3; 4; 3; 2; 5; 1]。数字从1:k开始,k = 5.我想用m"做一个" k矩阵A(m是向量idx中的元素数)。 A的每一行都包含' 0' 0' 0或者' 1'用' 1'由向量idx的索引表示。例如,A(k = 3)的第三行是" 1"在第1,3,5列,因为那些是" 3"在idx中。所以A =

[0 0 0 0 0 0 0 1; 0 0 0 0 1 0 0 0; 1 0 1 0 1 0 0 0; 0 0 0 1 0 0 0 0; 0 1 0 0 0 0 1 0]

我如何在Octave中执行此操作?谢谢!

2 个答案:

答案 0 :(得分:1)

或另一种方式:

idx = [3; 5; 3; 4; 3; 2; 5; 1];
A = sparse (idx, [1:numel(idx)], 1)
A =   Compressed Column Sparse (rows = 5, cols = 8, nnz = 8 [20%])
(3, 1) ->  1
(5, 2) ->  1
(3, 3) ->  1
(4, 4) ->  1
(3, 5) ->  1
(2, 6) ->  1
(5, 7) ->  1
(1, 8) ->  1

它为您提供了一个压缩列稀疏(非常高效),您可以将其转换为"正常,完整矩阵":

B = full (A)
B =

0   0   0   0   0   0   0   1
0   0   0   0   0   1   0   0
1   0   1   0   1   0   0   0
0   0   0   1   0   0   0   0
0   1   0   0   0   0   1   0

答案 1 :(得分:0)

试试这个:

idx = [3; 5; 3; 4; 3; 2; 5; 1];
n = numel(idx);
k = 5;
A=zeros(k,n);

A(sub2ind(size(A), idx, [1:n]')) = 1

输出是:

A =

   0   0   0   0   0   0   0   1
   0   0   0   0   0   1   0   0
   1   0   1   0   1   0   0   0
   0   0   0   1   0   0   0   0
   0   1   0   0   0   0   1   0