用零点展开矩阵的MATLAB

用零点展开矩阵的MATLAB,matlab,matrix,vectorization,Matlab,Matrix,Vectorization,我需要一个矩阵nxn,其中第一个pxp包含1,其余为0。我可以通过遍历单元格来完成,所以我不是在问一种方法。我正在寻找“MATLAB方法”,使用内置函数和避免循环等 更加清晰 设n=4和p=2 那么预期的结果是: 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 可能有不止一个优雅的解决方案可以做到这一点,所以我会接受最短和最可读的答案 另外,这个问题的标题看起来有点不相关:我之所以使用这个标题,是因为我最初的方法是创建一个带有1的pxp矩阵,然后将其扩展到带有0的nxn 答案是

我需要一个矩阵
nxn
,其中第一个
pxp
包含1,其余为0。我可以通过遍历单元格来完成,所以我不是在问一种方法。我正在寻找“MATLAB方法”,使用内置函数和避免循环等

更加清晰

设n=4和p=2

那么预期的结果是:

1 1 0 0
1 1 0 0
0 0 0 0
0 0 0 0
可能有不止一个优雅的解决方案可以做到这一点,所以我会接受最短和最可读的答案


另外,这个问题的标题看起来有点不相关:我之所以使用这个标题,是因为我最初的方法是创建一个带有1的
pxp
矩阵,然后将其扩展到带有0的
nxn

答案是创建一个零矩阵,然后使用索引将其部分设置为
1

例如:

n = 4;
p = 2;
x = zeros(n,n);
x(1:p,1:p) = 1;
如果您坚持扩张,您可以使用:

padarray( zeros(p,p)+1 , [n-p n-p], 0, 'post')

通过水平和垂直连接,可以轻松创建矩阵:

n = 4;
p = 2;
MyMatrix = [ ones(p), zeros(p, n-p); zeros(n-p, n) ];

零展开矩阵的另一种方法是:

>> p = 2; n = 4;
>> M = ones(p,p)
M =
     1     1
     1     1
>> M(n,n) = 0
M =
     1     1     0     0
     1     1     0     0
     0     0     0     0
     0     0     0     0

padarray(one(p,p),[n-p n-p],0,'post')
也在工作,感谢您教我
padarray
函数。注意:
padarray
需要图像处理工具箱。
>> p = 2; n = 4;
>> a = [ones(p, 1); zeros(n - p, 1)]

a =

     1
     1
     0
     0

>> A = a * a'

A =

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