2016-07-12 75 views
0

我有一個列矢量A與維度(35064x1),我想重塑成一個矩陣720線和儘可能多的列,因爲它需要。如何重塑非二次矩陣?

在MATLAB中,這將會是這樣的:

B = reshape(A,720,[]) 

其中B是我的新矩陣。

但是,如果我將35604除以720,則會有餘數。理想情況下,MATLAB會用720個值填充每一列,直到最後一列,它不會有720個值;而是504個值(48×720 + 504 = 35064)。

是否有任何功能,如reshape,將執行此任務?

因爲我不擅長編碼,所以在進入編程之前,我會先求助於內置函數。

回答

3

reshape保留元素的數量,但你達到相同的兩個步驟

b=zeros(720*ceil(35604/720),1); b(1:35604)=a; 
reshape(b,720,[]) 
+1

正確的想法,但不正確的代碼。 'zero(4)'創建一個4x4矩陣。 – Daniel

+0

是的,沒錯。固定。 – karakfa

0
A = rand(35064,1); 
NoCols = 720; 
tmp = mod(numel(A),NoCols); % get the remainder 
tmp2 = NoCols -tmp; 
B = reshape([A; nan(tmp2,1)],720,[]); % reshape the extended column 

這首先獲取餘數,再減去從列數找的量缺少值。然後創建一個包含nan(或0,無論哪個最適合您的用途)的數組以填充原始數組,然後reshape。一個班輪:

A = rand(35064,1); 
NoCols = 720; 
B = reshape([A; nan(NoCols-mod(numel(A),NoCols);,1)],720,[]); 
0

karakfa得到了正確的想法,但他的代碼中有一些錯誤。

修復錯誤並稍微簡化它,你結束了:

B=nan(720,ceil(numel(a)/720)); 
B(1:numel(A))=A; 

造成一種適合在一個矩陣和assingn A的elemnent到第一numel(A)矩陣的元素。

另一個實現這可能是有點快,但操縱你的變量b

%pads zeros at the end 
A(720*ceil(numel(A)/720))=0; 
%reshape 
B=reshape(A,720,[]);