2013-08-16 4 views
0

기본적으로 매트릭스의 지정된 열을 꺼내기 위해 아래 코드를 루프에서 실행하고 있습니다. 내 루프에서 병목 현상이 발생하는 곳이라는 느낌이 들었습니다. 행렬 산술처럼 쉽게 할 수있는 것처럼 느껴지지만 지금은 아무 것도 생각할 수 없습니다. 아래 함수는 인수 matINPUT을 큰 행렬로 취하고 INPUT을 원하는 열의 정수 오프셋으로 취합니다. 결과는 프로그램의 다른 곳에서 사용하기 위해 arrayOUTPUT에 저장됩니다.Matlab에서 매우 큰 (> 1GB) 배열의 변수를 열로 가져 오는 가장 빠른 방법은 무엇입니까?

// Get size and offset of matrix 
[matOffset, matSize] = size(matINPUT); 

// Test if INPUT isnt out of bounds, and return 0 if it is 
if INPUT > matSize then 
    arrayOUTPUT = [0] 
    return 
end 

// pre-load array for correct size 
arrayOUTPUT = zeros(matOffset,1) // generates the correct array size 

// iterate through all slots and populate 
for x = 1:matOffset 
    arrayOUTPUT(x) = matINPUT(x + (INPUT - 1)*matOffset) 
end 
+1

이 사용 해봤'arrayOUTPUT = matINPUT (:, colnum)', colnum'이고' 선택할 열 번호? ':'는'colnum'에있는 모든 열, 즉 전체 열을 선택합니다. MATLAB이 열 전공이기 때문에 이것이 꽤 빠르다고 생각합니다. 당신이 이것을하고 있다면 미리 할당 할 필요도 없습니다. – Justin

+0

옙 @jucestain 난 바보 야. 네이티브 솔루션은 제가 생각한 것입니다. 그러나 슬프게도 단지 10k 반복 당 두 번째를 깎아 내린 것 같아요. 4-5 내가 바라는 것은 아닙니다. 감사! – AlexCU

답변

0

코드의 마지막 부분부터 행렬의 부품 선택과 유사합니다. 나는 (이 도울 수 있기를 바랍니다) 루프

을 위해 사용하지 않고 값을 얻기 위해 인덱스 벡터를 사용할 수 있습니다 제안