八度模型矩阵
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
这将占用更少的内存,但许多函数将无法处理它们并将它们转换为完整矩阵。所以这是否值得取决于你下一步想做什么。
在 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
这将占用更少的内存,但许多函数将无法处理它们并将它们转换为完整矩阵。所以这是否值得取决于你下一步想做什么。