MATLAB Answers

Delete certain entries in a 3D matrix

조회 수: 2(최근 30일)
OK, so I have a 4 page 3x30 3D matrix (which is 3x30x4) and would like to delete certain entries in matrix. These entries are the same on all 4 pages and the entries are stored in a 1x30 matrix like:
idx = [1 1 3 3 3 3 3 3 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2]
such that each entry in idx corresponses to the entry needed to be delete in each column. By say delete, I mean assigning a [ ] to the entry. To further illustrate let's say I have a 3D matrix A and idx:
A(:,:,1) = [1 2 3;
4 5 6;
7 8 9]
A(:,:,2) = [10 11 12;
13 14 15;
16 17 18]
A(:,:,3) = [19 20 21;
22 23 24;
25 26 27]
idx = [3 2 2]
I would like to get a 2x3x3 matrix B in this context:
B(:,:,1) = [1 2 3;
4 8 9]
B(:,:,2) = [10 11 12;
13 17 18]
B(:,:,3) = [19 20 21;
25 23 24]
Are there any methods that can do this without a loop?

  댓글 수: 0

로그인 to comment.

채택된 답변

Andrei Bobrov
Andrei Bobrov 8 Apr 2020
편집: Andrei Bobrov 9 Apr 2020
A = randi(200,3,30,4);% Let A - our array [3 x 30 x 4]
idx = [1,1,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2]';
[m,n,k] = size(A);
[i,j] = ndgrid(1:n,1:k);
A(sub2ind([m,n,k],repmat(idx(:),1,k),i,j)) = [];
B = reshape(A,m-1,n,[]);

  댓글 수: 1

Douglas Chiang
Douglas Chiang 8 Apr 2020
Thanks Andrei, this is exactly what I want :)

로그인 to comment.

추가 답변(1개)

Rik
Rik 8 Apr 2020
I'm assuming the last page of your example is incorrect.
clear A
A(:,:,1) = [1 2 3;
4 5 6;
7 8 9];
A(:,:,2) = [10 11 12;
13 14 15;
16 17 18];
A(:,:,3) = [19 20 21;
22 23 24;
25 26 27];
idx = [3 2 2];
sz=size(A);
rowsub=repmat(idx,1,sz(3));
colsub=repmat(1:sz(2),1,sz(3));
pagesub=repelem(1:sz(3),1,sz(2));
ind=sub2ind(sz,rowsub,colsub,pagesub);
B=A;
B(ind)=[];
szB=sz-[1 0 0];
B=reshape(B,szB)

  댓글 수: 1

Douglas Chiang
Douglas Chiang 8 Apr 2020
Thanks for your answer :)

로그인 to comment.

이 질문에 답변하려면 로그인을(를) 수행하십시오.


Translated by