How to Obtain a Portion of an n-dimensioned Matrix
조회 수: 4 (최근 30일)
이전 댓글 표시
I have a 6 dimensional matrix with dimensions 16x20x22x6x3x13. I identified specific elements of that matrix with the following:
y = find(spec_neg(:,:,:,:,:,1) ~= 0);
Since y is now the indices of the spec_neg and I would like these in matrix subscript form, I determined the subscripts by doing the following:
[i,j,k,l,m,n] = ind2sub([16,20,22,6,3,13],y);
and then concatenated these subscripts into matrix form:
y_ind = cat(2,i,j);
y_ind = cat(2,y_ind,k);
y_ind = cat(2,y_ind,l);
y_ind = cat(2,y_ind,m);
y_ind = cat(2,y_ind,n);
I want to obtain the values of spec_neg that correspond to the subscript values of y_ind but when I do the following:
spec_neg(y_ind)
I get all zeros so that is obviously not the values in y.
What am I doing wrong?
댓글 수: 1
Matt J
2014년 11월 20일
Since y is now the indices of the spec_neg and I would like these in matrix subscript form
Be careful. The vector y does not contain indices of spec_neg. It contains indices of the 5-dimensional array spec_neg(:,:,:,:,:,1). The two would not coincide if you were indexing a different section like spec_neg(:,:,:,:,:,10).
So, which is it that you want?
채택된 답변
Matt J
2014년 11월 20일
편집: Matt J
2014년 11월 20일
I would extract the values prior to extracting the indices, as below. Notice also that you don't have to do all those painful multiple calls to cat(2,...):
s=spec_neg(:,:,:,:,:,1);
idx=logical(s);
values=s(idx);
[c{1:5}]=ind2sub(size(s), find(idx));
y_ind=cat(2,c{:});
Notice also that, while spec_neg is 6-dimensional, spec_neg(:,:,:,:,:,1) is only 5-dimensional, so I think you really want 5 columns in y_ind.
댓글 수: 5
Matt J
2014년 12월 16일
편집: Matt J
2014년 12월 16일
Why does the following not work?
Because y_ind is a concatenation of subscripts, which is not a legal kind of indexing in MATLAB. Only when y_ind is a linear or logical index array can it be used to pull out data from an array with the single argument syntax,
spec_neg(y_ind)
Subscripts must be used in a comma-separated syntax
spec_neg(I,J,K,...)
Furthermore, only rectangular sub-matrices and sub-arrays can be extracted with subscripts. To extract an arbitrary list of values, you must again use logical or linear indexing.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrices and Arrays에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!