2011-07-06 70 views
2

我有一個1974x1的矢量,Upper,我試圖將信息分解成單獨的36個項目的數組。因此,我用長度來發現有1974個項目,然後除以36並使用floor函數。我無法弄清楚如何用n來完成這一切。MATLAB:定義矩陣的n個子集

這是我的邏輯:我定義n試圖找到需要定義的子集數。然後,我試圖讓subsetn變成subset1,subset2,...,subset36。但是,MATLAB僅將矩陣子集定義爲1x36矩陣。但是,這個矩陣包含了subset1應該包含的內容(1 ... 36)。你們對新手有什麼建議嗎?我究竟做錯了什麼?

binSize = 36; 
nData = length(Upper); 
nBins = floor(nData/36); 
nDiscarded = nData - binSize*nBins; 

n=1:binSize; 
subsetn= [(n-1)*binSize+1:n*binSize]; 
+0

可以簡化你的榜樣了一下,給出一些具體的預計業績:假設'Upper'是'5x1'(事實上,假設它等於'[10; 11; 12; 13; 14]')和'binSize'是2. subset1,subset2和subset3具有哪些值? 'subsetn'的值應該是什麼? – Lambdageek

+0

謝謝你的迴應!這裏是一個例子:如果Upper是5x1並且binSize是2,那麼會有2個子集。 subset1爲[1 2],subset2爲[3 4]。在你的例子中,5將被丟棄。子集不應該存在,我寫它是因爲我想簡化創建子集1和子集2的過程。 –

回答

3

其中n列是你n個子集,您可以創建一個54x36陣列。

subsetArray=reshape(x(1:binSize*nBins),[],nBins); 

您可以訪問n個子集爲subsetArray(:,n)

+0

把'36'改成'binSize'? – Lambdageek

+0

噢,當然!感謝您的支持! – abcd

+0

謝謝你,這是一個好主意。我遇到的一個問題是,每個列中有54個項目,而不是應該有的36個項目。我應該如何調整它,以便每列中有36個連續條目,並且subsetArray是36x54矩陣?對不起,我真的很陌生! –

1

對不起提前如果我誤解你想要做什麼。

我認爲下面的小動作可能會做你想要什麼(這是哈克,但我沒有Matlab的專家):

[a, b] = meshgrid(0:nBins-1, 0:binSize-1) 
inds = a*binSize + b + 1 

現在inds是指數的nBins * binSize矩陣。你可以使用它索引Upper,就像

Upper(inds) 

它應該爲您提供子集作爲結果矩陣中的列。

編輯:在看到尤達的答案,他是更好;)

+0

+1這是一個同樣有效和好的答案:) – abcd