matlab:如何通过移位向量创建矩阵

时间:2014-09-24 22:17:03

标签: matlab matrix

我在matlab中有行和列:

a = [1 0 3 ... a_k]; - 第1xk行

b = [1; 0; 3; ...... b_k]; - 列kx1

我想创建新矩阵(A和B)mxn,可以通过移位行和列填充:

A = [1 0 3 0 0 0 0 ... 0;
     0 1 0 3 0 0 0 ... 0;
     0 0 1 0 3 0 0 ... 0;
     ...
     0 0 0 0 0 0 ... 1 0 3 ]

B=  [1 0 0 0 0 0 0 ... 0;
     0 1 0 0 0 0 0 ... 0;
     3 0 1 0 0 0 0 ... 0;
     0 3 0 1 0 0 0 ... 0;
     0 0 3 0 1 0 0 ... 0;
     ... 
     0 0 0 0 0 0 0 ... 3]

我该怎么做?

2 个答案:

答案 0 :(得分:1)

通过使用索引和bsxfun的组合,您可以通过稍微棘手的方式执行此操作。首先,我们要创建一个索引矩阵,表示我们正在尝试的转变。它应该是这样的(至少对于A):

1  2  3  4 ...  k
k  1  2  3 ...  k-1
etc

要创建此内容,我们可以按如下方式使用bsxfun

index = mod(bsxfun(@plus,1:k,-(1:(k-2))'),k)+1;

我们可以使用此作为A的索引矩阵来创建矩阵a

A = a(index);

矩阵B是相同的,只是换位:

B = b(index)';

答案 1 :(得分:1)

这是你想要的吗?

>> a = [1 0 3];
>> m = 5; %// number of rows
>> A = convmtx(a,m)
A =
     1     0     3     0     0     0     0
     0     1     0     3     0     0     0
     0     0     1     0     3     0     0
     0     0     0     1     0     3     0
     0     0     0     0     1     0     3

>> b = [1;0;3];
>> m = 4; %// number of columns
>> B = convmtx(b,m)
B =
     1     0     0     0
     0     1     0     0
     3     0     1     0
     0     3     0     1
     0     0     3     0
     0     0     0     3