我需要编写将行向量转换为矩阵的代码。例如,如果我有a = 1 2 3 4 5 6 7 8 9
,我希望矩阵为:
m = [1 2 3;
4 5 6;
7 8 9]
我有这个,这不起作用。有人可以帮助我吗?
for i=1:length(a)
m = a(i);
i = i + 1;
end
此外,我不允许使用任何Matlab的内置函数(例如reshape
)。
答案 0 :(得分:4)
使用重塑
a = [1 2 3 4 5 6 7 8 9];
A = reshape(a, 3, [])'
其中第三个参数是自动获取的(cols数)
或者如果您不能在函数中使用任何MATLAB版本,请使用此处
A = zeros(3,3); %// or A(3,3) = 0 by thewaywewalk (thank you)
A(:) = a;
A = A';
答案 1 :(得分:3)
当然,使用reshape
是将矢量转换为矩阵的正确方法
但是,由于您不想使用任何Matlab函数,因此可以使用循环
A = zeros(3,3); %// preallocate
for ii=1:3,
A(ii,:) = a( (ii-1)*3 + 1:3 ); %// put one row into place
end
或者,更一般地说,如果您想将H
* W
向量重塑为H
- by - W
矩阵:
A = zeros(H,W);
for ii=1:H
A( ii, : ) = a( (ii-1)*W + 1:W );
end
PS,
请注意,最好是not to use i
as a variable name in Matlab。