在 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 中构造一个矩阵的主要内容,如果未能解决你的问题,请参考以下文章

从 GNU Octave 中的矩阵中删除一列

Octave中的矩阵操作

Machine Learning——octave矩阵操作——DAY3

octave矩阵运算

Coursera在线学习---第二节.Octave学习

[ML] Octave 简单操作