Arrays 用MATLAB创建索引

Arrays 用MATLAB创建索引,arrays,matlab,matrix,indexing,Arrays,Matlab,Matrix,Indexing,我因尝试成功地做到这一点而感到恼火。我有一个矩阵中的数据A,它的大小为[100 612]。列数据由51个站点以12个月为一组,即总共612列 我需要创建一个索引来选择这个序列中的列;1:51:612,然后2:51:612,以此类推,直到51:51:612。最后一个数组应该是一个100行乘612列的矩阵,具有此序列 Row 1: Columns 1-12=(1,52,103,154,205,256,307,358,409,460,511,562) Columns 13-24=(2,5

我因尝试成功地做到这一点而感到恼火。我有一个矩阵中的数据A,它的大小为[100 612]。列数据由51个站点以12个月为一组,即总共612列

我需要创建一个索引来选择这个序列中的列;1:51:612,然后2:51:612,以此类推,直到51:51:612。最后一个数组应该是一个100行乘612列的矩阵,具有此序列

Row 1: Columns 1-12=(1,52,103,154,205,256,307,358,409,460,511,562)
       Columns 13-24=(2,53,104,155,206,257,308,359,410,461,512,563)
       ...
       etc to the end of the first row with the last 12 columns with these numbers 
       Columns 601-612=(51,102,153,204,255,306,357,408,459,510,561,612).

然后重复100次,得到100行。我需要将其用作逻辑索引,以提取或重新排序上述给定数据中的原始数据。

以下代码应该可以工作:

months = 12;
sites = 51;

idx       = 1:sites:months*sites;           %// get array [1,52,103,...,562]
final_idx = bsxfun(@plus,idx',[0:sites-1]); %'//add offsets to idx  
final_idx = final_idx(:)';                  %'//get array elements in a row vector

A_new = A(:,final_idx);                     %// rearrange columns 

以下代码应该可以工作:

months = 12;
sites = 51;

idx       = 1:sites:months*sites;           %// get array [1,52,103,...,562]
final_idx = bsxfun(@plus,idx',[0:sites-1]); %'//add offsets to idx  
final_idx = final_idx(:)';                  %'//get array elements in a row vector

A_new = A(:,final_idx);                     %// rearrange columns 
这是一个使用和的一行程序

或者你可以通过转置避免排列

这是一个使用和的一行程序

或者你可以通过转置避免排列


看来你们终于可以很好地使用这三个强大的功能了!不错。“我本该考虑改型的。”迪瓦卡,克里斯,所有的功劳都归你们了。没有人教我MATLAB,只是从你的答案、个人资料等方面学习。看来你们终于可以很好地使用这三个强大的函数了!不错。“我本该考虑改型的。”迪瓦卡,克里斯,所有的功劳都归你们了。没有人教我MATLAB,只是从你的答案、个人资料等方面学习。
out = A(:,reshape(reshape(1:612,51,[]).',1,[]));