2017-04-02 58 views
0

我曾尝试在Matlab多个解决方案来的矢量转换例如从向量创建矩阵,使得其高度和宽度

A = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17] 


B= [ 1 2 3 4 ] 
    5 6 7 8 
    9 10 11 12 
    13 14 15 16 
    17 0 0 0 
     0 0 0 0 
     0 0 0 0 
     0 0 0 0 

在Matlab倍数的权力这里所需的矩阵是8x4,或者高度或宽度是4的任意倍数。如果我们保留任何一个维度(高度或宽度)以适应所有元素并用零填充额外元素,则这意味着最接近的4的倍数。我试图重塑像这样

reshape([c(:) ; zeros(rem(nc - rem(numel(c),nc),nc),1)],nc,[]) 

这里c是原始矢量或矩阵,NC是列数。

它只是改变行列数的数量,但没有考虑到的高度和宽度的条件所需的可能的权力。我没有具有vec2mat功能的Communications Toolbox。 另一种可能的替代思路是用全零初始化一个矩阵,然后进行赋值。但在这一点上我卡住了。所以请帮助我的matlab专家。

+0

如何确定的行数?你的例子没有使用4的最接近倍数... – beaker

+0

我的意思是我得到一个任意长度的原始矩阵A.我尝试将其转换为宽度或高度可以固定的新矩阵。例如'4x4,4x8,4x12'等等。 – Boggartfly

+0

啊,所以行数是4的倍数,而不是元素的数量。我现在明白了。 – beaker

回答

1

我想这你的意思:

n = 4; 
A = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]; 
B = zeros(n,ceil(numel(A)/n^2)*n); 
B(1:numel(A)) = A; 
B = B' 

B = [ 1 2 3 4 
    5 6 7 8 
    9 10 11 12 
    13 14 15 16 
    17 0 0 0 
     0 0 0 0 
     0 0 0 0 
     0 0 0 0] 
+0

这似乎工作!谢谢! @beaker看看这个! – Boggartfly