我有大小为25001x1的矢量,它代表我的一个信号样本,我想创建矩阵,使矩阵的第一列是我的矢量或信号,每列的其余部分是原始信号或矢量的移位版本。我用以下方式完成(通过添加零来考虑10x1的向量用于理解目的)。
y=[1 2 3 4 5 6 7 8 9 10 ]';
A=zeros(10,10);
for i=1:length(y)
A(:,i)=y;
y=[1 2 3 4 5 6 7 8 9 10 ]';
y=[zeros(1,(i))';y(1:end-(i))];
end
结果如下
>> A
A =
1 0 0 0 0 0 0 0 0 0
2 1 0 0 0 0 0 0 0 0
3 2 1 0 0 0 0 0 0 0
4 3 2 1 0 0 0 0 0 0
5 4 3 2 1 0 0 0 0 0
6 5 4 3 2 1 0 0 0 0
7 6 5 4 3 2 1 0 0 0
8 7 6 5 4 3 2 1 0 0
9 8 7 6 5 4 3 2 1 0
10 9 8 7 6 5 4 3 2 1
现在,当我想要移动多个元素或想要添加多个零时,我执行了以下操作
y=[1 2 3 4 5 6 7 8 9 10 11 ]';
A=zeros(11,11);
for i=1:length(y)
A(:,i)=y;
y=[1 2 3 4 5 6 7 8 9 10 11 ]';
y=[zeros(1,(i*2))';y(1:end-(i*2))];
if (i>=(length(y)/2))
break;
end
end
这导致以下结果
>> A
A =
1 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0
3 1 0 0 0 0 0 0 0 0 0
4 2 0 0 0 0 0 0 0 0 0
5 3 1 0 0 0 0 0 0 0 0
6 4 2 0 0 0 0 0 0 0 0
7 5 3 1 0 0 0 0 0 0 0
8 6 4 2 0 0 0 0 0 0 0
9 7 5 3 1 0 0 0 0 0 0
10 8 6 4 2 0 0 0 0 0 0
11 9 7 5 3 1 0 0 0 0 0
是否有任何一般化的方法来做同样的事情而且没有使用for循环?