我在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]
我该怎么做?
答案 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