5

我需要一个 的矩阵nxn,其中第一个pxp包含 1,其余为 0。我可以通过遍历细胞来做到这一点,所以我不是在寻求一种方法来做到这一点。我正在寻找“ MATLAB方式”来做到这一点,使用内置函数并避免循环等。

更清楚;

n=4 and p=2,

那么预期的结果是:

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

可能有不止一种优雅的解决方案可以做到这一点,所以我会接受最短且最易读的答案。

PS 问题标题看起来有点无关紧要:我放这个标题是因为我最初的方法是pxp用 1 创建一个矩阵,然后nxn用 0 扩展它。

4

4 回答 4

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')
于 2012-06-03T11:03:57.953 回答
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
于 2012-06-03T11:40:04.933 回答
2

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

n = 4;
p = 2;
MyMatrix = [ ones(p), zeros(p, n-p); zeros(n-p, n) ];
于 2012-06-03T11:38:22.437 回答
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
于 2012-06-03T13:40:10.530 回答