在 Octave 中构造一个矩阵
Posted
技术标签:
【中文标题】在 Octave 中构造一个矩阵【英文标题】:construct a matrix in Octave 【发布时间】:2015-03-29 01:29:31 【问题描述】:我有一个向量 idx = [3; 5个; 3; 4; 3; 2; 5个; 1]。该数字来自 1:k,k = 5。我想制作一个“k by m”矩阵 A(m 是向量 idx 中的元素数)。 A 的每一行包含“0”或“1”,其中“1”由向量 idx 的索引指示。例如,A (k = 3) 的第三行在第 1、3、5 列是“1”,因为这些是 idx 中“3”的索引。所以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 中做到这一点?谢谢!
【问题讨论】:
【参考方案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
【讨论】:
【参考方案2】:试试这个:
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
【讨论】:
以上是关于在 Octave 中构造一个矩阵的主要内容,如果未能解决你的问题,请参考以下文章