将行向量转换为矩阵

时间:2015-10-07 05:11:04

标签: matlab matrix vector reshape

我需要编写将行向量转换为矩阵的代码。例如,如果我有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)。

2 个答案:

答案 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