Find the indices of one variable in another one avoiding NaNs

조회 수: 3 (최근 30일)
Daria Ivanchenko
Daria Ivanchenko 2020년 11월 3일
댓글: Daria Ivanchenko 2020년 11월 4일
Hi!
I have two matrices, A and B, they have the same number of rows and different number of columns. Matrix A is just some numbers, matrix B is the indices. Both matrices have different amout of NaNs in the end.
I want to find the number in matrix A that matches the index in the matrix B (using the simple C = B(A)). But it doesn't work with NaNs inside the matrices. Is there some other way to do it?
A = [1 2 3 7 8; 1 5 3 NaN NaN; 1 9 3 6 NaN];
B = [2 4 5 NaN; 1 2 3 NaN NaN; 1 2 NaN NaN NaN];
C = B(A);
C = [2 7 8; 1 5 3; 1 9];
Thanks!
  댓글 수: 4
Daria Ivanchenko
Daria Ivanchenko 2020년 11월 3일
Regarding the sample, this one is correct:
A = [1 2 3 7 8; 1 5 3 NaN NaN; 1 9 3 6 NaN];
B = [2 4 5 NaN NaN; 1 2 3 NaN NaN; 1 2 NaN NaN NaN];
C = B(A);
C = [2 7 8; 1 5 3; 1 9];
Yeah, I missed one NaN, sorry.
Stephen23
Stephen23 2020년 11월 3일
편집: Stephen23 2020년 11월 3일
This is not a valid matrix, because the rows have different numbers of elements:
C = [2 7 8; 1 5 3; 1 9]; % NOT VALID

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

채택된 답변

Stephen23
Stephen23 2020년 11월 3일
편집: Stephen23 2020년 11월 3일
The C you showed in your example is not possible as it has different numbers of elements in each row, but you could put the data into a cell array:
>> A = [1 2 3 7 8; 1 5 3 NaN NaN; 1 9 3 6 NaN]
A =
1 2 3 7 8
1 5 3 NaN NaN
1 9 3 6 NaN
>> B = [2 4 5 NaN NaN; 1 2 3 NaN NaN; 1 2 NaN NaN NaN]
B =
2 4 5 NaN NaN
1 2 3 NaN NaN
1 2 NaN NaN NaN
>> idx = ~isnan(B);
>> [idr,~] = find(idx);
>> idc = B(idx);
>> idy = sub2ind(size(A),idr,idc);
>> C = accumarray(idr,A(idy),[],@(v){v});
>> C{:}
ans =
2
7
8
ans =
1
5
3
ans =
1
9

추가 답변 (0개)

카테고리

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

태그

Community Treasure Hunt

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

Start Hunting!

Translated by