필터 지우기
필터 지우기

Accessing certain Dimension of Multidimensional Array

조회 수: 11 (최근 30일)
Andrew Barton
Andrew Barton 2012년 10월 4일
Hi All,
Recently I've been working on a problem where I have a multidimensional array where I don't know how how many dimensions I have, but I want to get all the items that are in the ith slice (row, column, matrix, hyperplane, idk what to call it) of the jth dimension. Is there any way to do this easily in MATLAB?
As an example, for a 3x3x3 matrix, if I want the 2nd slice in the 3rd dimension, I wold go A(:,:,2), but here I don't have the luxury of typing however may semicolons I want.

채택된 답변

Matt Fig
Matt Fig 2012년 10월 4일
편집: Matt Fig 2012년 10월 4일
Here is how I would do it:
% A is given, up to 8 dims here.
A = rand(max(2,randi(4,1,max(3,randi(8)))));
idx1 = 2; % Say we want the idx1th slice of
idx2 = randi(ndims(A)); % The idx2th dimension.
C = repmat({':'},1,ndims(A));
C(idx2) = {idx1}; %This is our index into A.
SLC = A(C{:}) % Here is our slice.
  댓글 수: 2
Azzi Abdelmalek
Azzi Abdelmalek 2012년 10월 4일
Very good answer! I like it
Matt Fig
Matt Fig 2012년 10월 4일
Thanks, Azzi! The first time I saw a cell array used to index a numeric array this way was Walter showing someone how to do it 2-3 years ago. That Walter knows all the tricks!

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Matt J
Matt J 2012년 10월 4일
편집: Matt J 2012년 10월 5일
Just because I'm fond of circumventing repmat :-)
i=2, %slice
j=3; %dim
S=size(A);
Ar=reshape(A,prod(S(1:j-1)),[], prod(S(j+1:end)));
slice = reshape( Ar(:,i,:) , [S(1:j-1), 1, S(j+1:end)]);

카테고리

Help CenterFile Exchange에서 Matrix Indexing에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by