2011-04-08 2 views
1

나는 M-by-N 행렬을 가지고 있는데, 이것은 N 행 M 행렬의 연결이다. 각 M-by-M 서브 매트릭스의 대각선을 가져 와서 함께 연결함으로써이 매트릭스를 M-N 매트릭스로 줄이기를 원합니다. 어떻게하면 간단한 벡터화 된 방식으로이 작업을 수행 할 수 있습니까?MATLAB에서 3 차원 행렬의 대각선을 어떻게 인덱스 할 수 있습니까?

+0

흠, 전에 이런 식으로 대답했다고 생각했지만, 그것을 발견하는 데 시간이 걸렸습니다. [대각선을 matlab의 4 차원 행렬에서 1로 변경] (http://stackoverflow.com/questions/) 5319178/대각선 대 1 대 4 차원 매트릭스 - 인 - 매트랩). 약간의 차이점이 있지만 (할당 대 색인, 3 차원 대 4 차원), 대답은 일반적으로 질문이 중복으로 간주 될 수있을 정도로 일반적입니다. 아마도 제목과 태그의 세련미가 더 쉽게 찾을 수 있도록하기 위해서입니다 (나는 최근에 많은 것을 말하고 있습니다). – gnovice

+0

많은 질문은 질문자의 요구 (예를 들어, 내가 어쩌구 저런 것에서 농도를 계산할 수 있는지)로 설명되지만 본질적으로 행렬 조작 문제입니다. 질문자가 만족 한 후에 나중에 정리할 것을 제안합니다. 즉, 좀 더 일반적으로 만들 수 있습니다 (즉, 특정 요구 사항을 제거하고 맨손으로 깎아 내림). 실제로 대부분의 경우 혼란은 질문의 표현 방식 때문이기 때문에 실제로 답을 검색하는 사람들이 더 쉽고 잘하면 거짓말을 줄이는 데 도움이됩니다. – abcd

+0

@R. M : 저는 제목과 태그가 더 명확 해 지도록 이러한 편집 작업을 이미 해왔습니다. 이러한 종류의 행렬 조작 문제에 대한 검색에서 이러한 표시를 더 잘 만들 수 있기를 바랍니다. – gnovice

답변

3

당신은 대각선의 선형 인덱스를 얻고 새로운 매트릭스를 위에서

[M,~,N]=size(A);%# A is your matrix 
indx=cumsum([1:(M+1):M^2; M^2.*ones(N-1,M)]);%#diagonal indices 

B=A(indx');%'# transpose to get MxN 

을 형성를 사용하여 작업을 수행 할 수 있습니다, 나는 기능에서 해당 출력을 무시 ~을 사용했습니다. 그러나 이것은 MATLAB R2009b 이상을 사용하는 경우에만 작동합니다. 사용중인 버전이 이전 버전 인 경우 더미 변수를 대신 사용하십시오.

관련 문제