이 질문을 팔로우합니다.
- 팔로우하는 게시물 피드에서 업데이트를 확인할 수 있습니다.
- 정보 수신 기본 설정에 따라 이메일을 받을 수 있습니다.
Extract row elements corresponding to a particular column value and save as new matrix
조회 수: 2 (최근 30일)
이전 댓글 표시
Sarah
2013년 3월 14일
I have a Mx4 matrix with the following format:
a1 b1 c d1
a2 b2 c d2
a3 b3 c d3
a4 b4 c1 d4
a5 b5 c1 d5
and what i want to do is create new matrices corresponding to the different c values in the third column renaming this matrix matc.
Any help would be really appreciated Sarah
답변 (2개)
Azzi Abdelmalek
2013년 3월 14일
편집: Azzi Abdelmalek
2013년 3월 14일
b=A(:,3)
b(b==c)=yourvalue
A(:,3)=b
댓글 수: 17
Sarah
2013년 3월 14일
Thank you! the values of c are increasing but not monotonically, I would like to create a loop to extract these values corresponding to the different c values. Any ideas on how I might do that?
Sarah
2013년 3월 14일
I do not want to replace them, I just want to extract the data corresponding to the different groups of c values for example create a matrix containing the data corresponding to c1 values and so on.
Sarah
2013년 3월 14일
Also in the code you wrote there the last line just rewrites the variable b with the original matrix again?
Azzi Abdelmalek
2013년 3월 14일
편집: Azzi Abdelmalek
2013년 3월 14일
If A=[ 2 3 4 6
4 8 7 9
5 2 7 1
4 2 2 3]
What should be the result?
Azzi Abdelmalek
2013년 3월 14일
편집: Azzi Abdelmalek
2013년 3월 14일
A=[ 2 3 4 6
4 8 7 9
5 2 7 1
4 2 2 3]
A=sortrows(A,3)
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
assignin('base',sprintf('mat%d',c(k)),A(idx,:))
end
%Check the matrices mat2, mat4 and mat7
Sarah
2013년 3월 14일
And because some of the c values are not integers is there a way to round the c value before assigning it to the variable name?
Azzi Abdelmalek
2013년 3월 14일
편집: Azzi Abdelmalek
2013년 3월 14일
What I suggest is using cell array
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
out{k}=A(idx,:)
end
then check
out{1}
out{2}
out{3}
Sarah
2013년 3월 14일
I would round to the nearest integer eg 1.8->2 and so on.. Finally to save each matrix, I am unfamiliar with the assignin function. How would I save the individual matrices eg mat11 mat12 and so on..?
Sarah
2013년 3월 14일
I have looked at the various matrices when I round the value c to the nearest integer, it is just saving the matrices within the loop that I am having some difficulty with now.
Azzi Abdelmalek
2013년 3월 14일
편집: Azzi Abdelmalek
2013년 3월 14일
Did you check the cell array solution? You do not need to create such variables
Sarah
2013년 3월 14일
You mean I do not need to save the matrices? I would like to save them individually as they are created within the loop.
Azzi Abdelmalek
2013년 3월 14일
Check this :
clear out
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
out{k,2}=A(idx,:)
out{k,1}=c(k)
end
out{1,1}, % is c1
out{1,2} % corresponding to c1
out{2,1}, % is c2
out{2,2} % corresponding to c2
and so on
Sarah
2013년 3월 14일
the matrices are being created correctly with the original code, I only wish to now save each matrix that was created within the loop eg after the assignin('base',sprintf('mat%d',c(k)),A(idx,:)) line. I appreciate your help with this!
Azzi Abdelmalek
2013년 3월 14일
편집: Azzi Abdelmalek
2013년 3월 14일
% Check this: for c=2.4 the variable will be mat2p4 instead of mat2.4
A= [ 2 3 4 6
4 8 7 9
5 2 7 1
4 2 2.4 3]
A=sortrows(A,3)
b=A(:,3);
c=unique(b);
for k=1:numel(c)
idx=find(b==c(k));
s=num2str(c(k))
s=strrep(s,'.','p')
assignin('base',['mat' s],A(idx,:))
end
Check the result
mat2p4
mat4
mat7
Sarah
2013년 3월 14일
So the matrix is sorted according to the third column so
A1=[4 2 2 3
2 3 4 6
4 8 7 9
5 2 7 1];
the answers should be
mat2=[4 2 2 3];
mat4=[2 3 4 6];
mat7=[4 8 7 9
5 2 9 1];
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!오류 발생
페이지가 변경되었기 때문에 동작을 완료할 수 없습니다. 업데이트된 상태를 보려면 페이지를 다시 불러오십시오.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
아시아 태평양
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)