2017-04-02 59 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