2011-07-06 4 views
2

私は1974x1ベクトルUpperを持っています。情報をそれぞれ36個の個別の配列に分解しようとしています。だから、長さを使って1974項目があり、それを36で割り、floor関数を使用していました。私はnでそれをすべて行う方法を理解できません。MATLAB:マトリックスのn個のサブセットを定義する

私のロジックは次のとおりです。定義する必要があるサブセットの数を見つけるために、nを定義しようとしています。次に、私はサブセットをサブセット1、サブセット2、...、サブセット36にすることを試みています。ただし、MATLABは行列のサブセットを1x36の行列としてのみ定義します。ただし、この行列には、サブセット1に含まれるものが含まれます(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つのサブセットがあります。サブセット1は[1 2]であり、サブセット2は[3 4]である。あなたの例では、5は破棄されます。サブセット1とサブセット2を作成するプロセスを簡素化したいので、サブセットは存在してはいけません。 –

答えて

3

あなたはn列目は、あなたのn番目のサブセットである54x36の配列を作成することができます。

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

私はあなたが何をしたいのか誤解場合はsubsetArray(:,n)

事前に申し訳
+0

'36 'を' binSize'に変更しますか? – Lambdageek

+0

もちろん、ああ!それをキャッチするためにありがとう! – abcd

+0

ありがとう、それは素晴らしい考えです。私が抱えている問題の1つは、36の代わりに各列に54の項目があることです。どのように各列に36の連続したエントリがあり、subsetArrayが36x54の行列になるように調整する必要がありますか?申し訳ありませんが、私はこれで本当に新しいです! –

1

としてn番目のサブセットにアクセスすることができます。

私は(それはハックですが、私はMatlabの専門家だ)以下の小さなトリックは、あなたがやりたいかもしれないと思う:今

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

indsは、インデックスのnbins個* binSize行列です。

Upper(inds) 

のようにUpperにインデックスを付けることができます。これにより、サブセットが結果のマトリックスの列として表示されます。

編集:ヨーダの答えを見に、彼は良いです;)

+0

+1これは同様に有効かつ良い答えです:) – abcd

関連する問題