创建具有从一维向量行长度L矩阵
问题描述:
假设我们有以下1D阵列创建具有从一维向量行长度L矩阵
x(1),x(2),......x(n)
其中n是样品的长度,假设我们想创建矩阵使用以下规则从该元件包括,使用一些参数L,我们的二维阵列包括由以下元素
以下代码function [ x ]=create_matrix(b,n,L)
for i=1:n/2
x(i,end)=b(i:L);
end;
(1 row) x(1),x(2),.....x(l)
(2 row) x(2),x(3),.....x(l+1)
(3 row) x(3),x(4),.......x(l+2)
.
.
.
.(m row) x(m),x(m+1).... x(n)
我试图
其中b是输入1D向量,n是长度(b)中,L为矩阵的行长度,但是当运行此代码,我得到以下错误
??? Undefined function or variable "x".
Error in ==> create_matrix at 4
x(i,end)=b(i:L);
也许东西在MATLAB二维阵列的错误声明?,还是其他什么东西其实我知道这是很容易实现,但我不能我自己,请大家帮忙
答
代码:
function [ x ]=create_matrix(b,l)
n = length(b);
m = n-l+1;
x = zeros(m,l);
for i=1:m
x(i,:)=b(i:i+l-1);
end;
end
例子:
EDU>> create_matrix(1:10,4)
ans =
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
6 7 8 9
7 8 9 10
另外,这个矩阵是一个翻转的toeplitz矩阵。于是同样的事情可以实现:
fliplr(toeplitz(4:10,4:-1:1))
输出:
ans =
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
6 7 8 9
7 8 9 10
答
另一种选择(在性能上可能更快)是使用bsxfun
,例如
m=7;
l=4;
bsxfun(@plus,[1:m]',0:l-1)
ans =
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
6 7 8 9
7 8 9 10
或为通用载体x
使用
x(bsxfun(@plus,x(1:m)',0:x(l-1)))
所以米应该有不同的价值吗? – 2013-03-22 17:31:31
aa是的,因为尽可能多我们改变l,m会被改变是的,我也看到 – 2013-03-22 17:33:13
@dato,更有效的实现可能是将列分配给x而不是像上面那样。这是因为MATLAB是专栏。 – Justin 2013-03-22 17:37:16