八度模型矩阵

Octave model matrix

在 Octave 中是否有一种简单的(非 for 循环)方法来创建模型矩阵。在 R 中,我使用 model.matrix() 来执行此操作。

我有这个数组:

array = [1;2;3;2]

我需要(出于回归原因)

*(model = [1 0 0 0; 0 1 0 1; 0 0 1 0])* EDIT on my side
result is this model (colum 1 is for 1, column 2 for the two's etc.:
model = [1 0 0 ; 0 1 0 ; 0 0 1 ; 0 1 0]

我可以用 for 循环来做到这一点:

model = zeros(4,3);

for i=1:4
 model(i,array(i)) = 1; 
end

但最好一步完成,例如:

model = model.matrix(array)

我可以直接将它包含在公式中

您需要像这样将您的值转换为线性指数:

octave:1> array = [1 2 3 2];
octave:2> model = zeros ([numel(array) max(array)]);
octave:3> model(sub2ind (size (model), 1:numel(array), array)) = 1
model =

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

因为你的矩阵会非常稀疏,一个可能的优化是创建一个稀疏矩阵。

octave:4> sp = sparse (1:numel(array), array, 1, numel (array), max (array))
sp =

Compressed Column Sparse (rows = 4, cols = 3, nnz = 4 [33%])

  (1, 1) ->  1
  (2, 2) ->  1
  (4, 2) ->  1
  (3, 3) ->  1

octave:5> full (sp)
ans =

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

这将占用更少的内存,但许多函数将无法处理它们并将它们转换为完整矩阵。所以这是否值得取决于你下一步想做什么。