Matrix Indexing from an Array of Numbers

3 ビュー (過去 30 日間)
Lauren Hopkins
Lauren Hopkins 2016 年 2 月 26 日
コメント済み: Lauren Hopkins 2016 年 2 月 26 日
Hello:
I have a matrix Y = 55x236 of values and a separate matrix Z = [24 38 46 52 66] I would like to extract all of the rows of Y but ONLY the columns starting at the values in Z (plus the next 4 columns). So in other words I would like to extract from Y, columns 24-28, 38-42, 46-50, 52-56, and 66-70.
So far I have been doing this with a for loop but this seems like something that could be done much easier. I have tried something like A = Y(:, (Z:Z+4)) but this only gives me columns 24-28. If I have to index into Z to do this, wouldn't that still require a loop?

採用された回答

Roger Stafford
Roger Stafford 2016 年 2 月 26 日
編集済み: Roger Stafford 2016 年 2 月 26 日
Assuming Z is a row vector
Y2 = Y(:,bsxfun(@plus,Z,(0:4).'));
  1 件のコメント
Lauren Hopkins
Lauren Hopkins 2016 年 2 月 26 日
Perfectly elegant; thanks. Also introduced me to bsxfun which I'm definitely going to use a lot in the future. Cheers!

サインインしてコメントする。

その他の回答 (1 件)

dpb
dpb 2016 年 2 月 26 日
One soluion; may be some "more better"...
idx=cell2mat(arrayfun(@colon,Z,Z+4,'uniform',0))); % column indices vector
A=Y(:,idx);
On can dispense with the temporary idx of course by folding into the indexing expression...
  1 件のコメント
Lauren Hopkins
Lauren Hopkins 2016 年 2 月 26 日
This in-and-of itself is very interesting as I wasn't sure there was a 'one-line' piece of code that could extend the indices into ranges. And it certainly does the job. Thank you for your response!

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by