2011-07-06 151 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