Is it possible to find corresponding row from other matrix's row??

조회 수: 1 (최근 30일)
Triveni
Triveni 2016년 3월 8일
댓글: Triveni 2016년 3월 9일
y = [ 90 90 -45 0 0 45 45 0 -45 15 15;
90 90 -45 0 0 45 45 0 -45 15 15;
90 90 -45 0 0 45 45 0 -45 15 0;
90 90 -45 0 0 45 45 0 -45 15 0;
90 90 -45 0 0 45 45 0 -45 15 15;
90 90 -45 0 0 45 45 0 -45 15 15;];
y0 = sort(y,2);
y = y(sum([ones(size(y,1),1),diff(y0,[],2)~=0],2) >= numel(unique(y)),:);
y = permute(y ,[3 2 1]);
for k = 1:size(y,3)
[x0(:,:,k), x00(:,:,k)] = hist(y(:,:,k), unique(y(:,:,k)));
end
x0 =permute(x0,[3 2 1]); x00 =permute(x00,[3 2 1]);
x0(any(x0<2,2),:) = [];
I have to find corresponding row of "x00"
  댓글 수: 2
Matthew Eicholtz
Matthew Eicholtz 2016년 3월 8일
Your question is a little confusing. Can you try rewording for clarity?
Where do you actually need help? In the last part?

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

채택된 답변

Stephen23
Stephen23 2016년 3월 9일
편집: Stephen23 2016년 3월 9일
It is easy, you just need to assign the logical conditions to an index variable. So instead of this:
x0(any(x0<2,2),:) = [];
you should allocate that logical condition to a variable:
idx = any(x0<2,2);
and then you can use idx for any of the matrices:
>> xdel = x0(idx,:)
xdel =
2 4 1 2 2
2 4 1 2 2
>> xnew = x0(~idx,:)
xnew =
2 3 2 2 2
2 3 2 2 2
2 3 2 2 2
2 3 2 2 2
and now you can try x00(idx,:) and x00(~idx,:) yourself!
  댓글 수: 2
Triveni
Triveni 2016년 3월 9일
Ya right...Thank you. ...
Triveni
Triveni 2016년 3월 9일
y = [ 90 90 -45 0 0 45 45 0 -45 15 15;
90 90 -45 0 0 45 45 0 -45 15 15;
90 90 -45 0 0 45 45 0 -45 15 0;
90 90 -45 0 0 45 45 0 -45 15 0;
90 90 -45 0 0 45 45 0 -45 15 15;
90 90 -45 0 0 45 45 0 -45 15 15;];
y0 = sort(y,2);
y = y(sum([ones(size(y,1),1),diff(y0,[],2)~=0],2) >= numel(unique(y)),:);
y = permute(y ,[3 2 1]);
for k = 1:size(y,3)
[x0(:,:,k), x00(:,:,k)] = hist(y(:,:,k), unique(y(:,:,k)));
end
x0 =permute(x0,[3 2 1]); x00 =permute(x00,[3 2 1]);
y = permute(y ,[3 2 1]);
idx = any(x0<2,2);
xdel = x0(idx,:)
xnew = x0(~idx,:)
y = y(~idx,:)

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

추가 답변 (1개)

Ced
Ced 2016년 3월 8일
편집: Ced 2016년 3월 8일
I am not sure I understood the full question, but in short, you want to delete rows in which there is an element < 2 ? You basically already answered the question. Since you like one liners, I think this should do the trick:
x(any(x<2,2),:) = [];
This finds all rows (DIM 2) in which there is ANY element smaller than 2, selects these rows, and deletes them.
If you want to match your centers, you can do:
rows_del = any(x<2,2);
x(rows_del,:) = [];
z(rows_del,:) = [];

카테고리

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