【发布时间】:2019-04-24 22:03:07
【问题描述】:
我有大小为 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 循环的情况下做同样的事情?
【问题讨论】:
标签: matlab