2014-12-25 3 views
1

2 차원 행렬을 행 벡터로 줄이려고합니다.변형 또는 matlab에 콜론 대신

큰 행렬을 사용하는 reshape을 사용하는 것은 실제로 느립니다. 다른 대안은 colon을 사용하는 것입니다,하지만 매트릭스의 전치가 결장 자체가 아니라 행렬이되기를 바랍니다.

A=magic(3) 

A = 

    8  1  6 
    3  5  7 
    4  9  2 

A(:)은 모든 열을 하나씩 쌓습니다.

AA=A(2:3,:)'; 

을 다음 바꿀 또는 대장 AA 대신 A.이

문제는 내가 AA 같은 추가 변수를 정의 할 해달라고입니다 :하지만 난 이런 식으로 뭔가를 찾고 있어요.

reshape없이 2 차원 행렬의 치수를 줄이기위한 방법이 있습니까?

+0

그렇다면 변수에 할당하지 않고'A (2 : 3, :) ''(또는'A (2 : end, :).')를 사용하지 않는 이유는 무엇입니까? –

+2

시간이 걸리는 것은 'reshape'이 아니라 다른 형태의 메모리 위치로 복사 할 필요가 있다고 생각합니다. – Shai

+0

@ LuisMendo, OP는 결국 1 차원 배열로 그것을 원하기 때문에 나는 추측한다. –

답변

0

subsref을 사용해보십시오. 예를 들어 다음과 같이 사용할 수 있습니다.

subsref(A',struct('type','()','subs',{{2:3,':'}})) 

업데이트 : 원래 질문에 대해 오해했습니다. 나는 OP가 열을 유지하는 전치 된 행렬에서 2 : 3 행을 선택하려고한다고 생각했습니다. 나는 다른 사람들에게 유용 할 수 있기 때문에 이전의 대답을 유지할 것이다.

[3 5 7 4 9 2] '

1

:

subsref(A(2:3,:)', struct('type','()','subs',{{':'}})) 

이 출력으로 줄 것이다 :

나는 그/그녀가 슬라이스와 매트릭스를 평평하게 다음을 사용할 수 있다고 생각 선형 인덱싱을 통해 추가 변수를 피할 수 있습니다. 귀하의 예를 들면 다음과 같습니다

A([2 5 8 3 6 9]) 

여기에서 일어나고있는 것은 이미 벡터로 변환 된 것처럼 당신이 A 치료,이 1 차원 배열의 요소를 통해 액세스 할 수 있습니다 것입니다

3 5 7 4 9 2 

준다 콜론을 사용하면 선형 인덱싱의 특별한 경우 인 A(:)A(1 : end)과 동일합니다.

오른쪽 선형 색인을 파악하는 것은 까다로울 수 있지만 sub2ind은 도움이됩니다.

주로 ((@Shai wrote)와 같이 중간 변수에 데이터를 쓰는 것을 피하기 때문에 코드 속도가 약간 빨라질 수 있습니다. 나는 너무 많이 기대하지 않을 것이다.