我需要一个nxn
的矩阵,其中第一个pxp
包含1个,其余为零。我可以通过遍历细胞来做到这一点,所以我不是想办法去做。我正在寻找“ MATLAB 方式”,使用内置函数和避免循环等。
更清楚;
让n=4 and p=2
,
然后预期的结果是:
1 1 0 0
1 1 0 0
0 0 0 0
0 0 0 0
可能有不止一个优雅的解决方案,所以我会接受最短且最易读的答案。
P.S。问题标题看起来有点无关紧要:我把这个标题放在首位,因为我的初始方法是用1创建pxp
矩阵,然后用零将其扩展为nxn
。
答案 0 :(得分:10)
答案是创建一个零矩阵,然后使用索引将其中一部分设置为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')
答案 1 :(得分:7)
使用零扩展矩阵的另一种方法:
>> 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
答案 2 :(得分:2)
您可以通过水平和垂直连接轻松创建矩阵:
n = 4;
p = 2;
MyMatrix = [ ones(p), zeros(p, n-p); zeros(n-p, n) ];
答案 3 :(得分:1)
>> 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