# accessing indexed values in a 3D array with a logical index

3 ビュー (過去 30 日間)
Belinda Finlay 2020 年 7 月 24 日
コメント済み: Belinda Finlay 2020 年 7 月 24 日
I have 3D array of temperature data that looks like this:
Z = rand(3,4,8);
It contains 8 slices of data on 3*4 grid. I have a logical array which is an index to a set of values on each of the 8 slices like this:
ind = logical(randi(2, [3 4]) - 1)
How to I create a new matrix which is the 3D and contains the temp data from Z for ind on each of the slices.
My Z matrix is actally 814*1294*40 and looking at other answers there should be a way to do this; however I am stumped.

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

### 採用された回答

Walter Roberson 2020 年 7 月 24 日
ind = repmat(ind, 1, 1, size(Z,3));
Z(ind)
However, this will give you a vector of results.
How to I create a new matrix which is the 3D and contains the temp data from Z for ind on each of the slices.
That is a problem, because when you select values for each slice, you get holes, and there is no way to create arrays with holes.
You could reshape Z(ind) to [], 1, size(Z,3) which would give you a vector for each layer.
##### 7 件のコメント5 件の古いコメントを表示5 件の古いコメントを非表示
Walter Roberson 2020 年 7 月 24 日
Let ind be the rectangular 2D mask that you had from before. Then
selected_area = Z(first_row : last_row, first_col : last_col, :);
Belinda Finlay 2020 年 7 月 24 日
I am extremely grateful for your assistance Walter - I could hug you.

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

### カテゴリ

Help Center および File ExchangeMultidimensional Arrays についてさらに検索

R2019b

### Community Treasure Hunt

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

Start Hunting!

Translated by