如何创建修改后的身份矩阵?

时间:2018-09-20 12:45:23

标签: matlab matrix matrix-multiplication

我在MATLAB中有一个单位矩阵,该矩阵用于联合假设检验的某些回归分析中。但是,当我更改测试的线性限制时,我将不再依赖于恒等矩阵。

举一个简单的例子,下面的代码根据y的值生成一个单位矩阵:

for i = [1, 2, 4]
  y = i
  x = 5;
  H = eye(y*x)
end

但是,我需要的不是身份矩阵,而是前两行,所有其他行都为零。

对于第一个示例,代码产生一个eye(5)

H =

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

我需要给定y不能产生身份但实际上产生的东西:

H =

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

我是否可以将单位矩阵调整为仅在前两行之后包含零?

3 个答案:

答案 0 :(得分:4)

我认为最简单的解决方案是建立一个全零的矩阵,然后将两个全零放置在linear indexing处:

H = zeros(x*y);
H([1 x*y+2]) = 1;

概括以上内容,将第一个N放在对角线上:

H = zeros(x*y);
H(x*y.*(0:(N-1))+(1:N)) = 1;

答案 1 :(得分:3)

根据this comment中的建议,您可以使用diag

diag([ones(2,1); zeros(x*y-2,1)])

之所以可行,是因为diag使向量成为方阵的主要对角线,因此您可以简单地将对角线向量作为对角线向量,即您的情况是2 1s,其余0s。

当然,如果您需要可变的1s,对此我对此表示怀疑,

n=2;
diag([ones(n,1); zeros(x*y-n,1)])

答案 2 :(得分:2)

以下是一些替代方案: