2017-02-01 6 views
0

XShooter 데이터로 작업하고 있으며 은하계 수정을 위해 MATLAB에서 ccm_unred을 사용하고 있습니다. 문제는MATLAB에서 큰 배열을 1D로 제한

funred = flux*10.^(0.4*A_lambda); 

이 코드 줄은 29686 X 29686 double 배열을 생성합니다. 난 그저 한쪽을 원한다면, funredfunred = funred(:,1)으로 재 할당함으로써이 작업을 수행 할 수 있지만이 코드는 57 seconds이 실행되어 내 CPU와 RAM을 너무 많이 사용하여 안정적인 상태를 유지하지 못합니다. funred의 세대를 처음부터 (:,1)으로 제한 할 수있는 방법이 있습니까?

답변

0

코드에서 29686 X 29686 행렬을 생성한다고 가정 할지라도, 방정식에서 요소 별 연산을 수행하고 있습니다. 즉, flux 또는 A_lambda은 29686 X 29686입니다. 그 크기의 것을 슬라이스하십시오! 그 중

가정 하나는 그냥 매트릭스가 아닌있는 하나의 (:,1)을 제거 29,686 X

funred = flux(:,1)*10.^(0.4*A_lambda(:,1)); 

29686입니다.

둘 다 matits 인 경우 수행 할 수 없습니다. flux*...은 전체 행렬이 작동해야하기 때문에 수행 할 수 없습니다.

+0

거기에는 하나의 행렬 조작이 있으므로, 단 하나의 행렬 만 있으면이 방법이 작동한다고 동의하지만 두 행렬 인 경우에는 올바르지 않다고 생각합니다. 둘 다 행렬이라면'funred = flux * 10.^(0.4 * A_lambda (:, 1))'이 필요할 것이라고 생각합니다. –

+0

@DennisJaheruddin 당신 말이 맞습니다. –

+0

@AnderBiguri 대단히 감사합니다. 문제는'A_lambda'였습니다. 코드에서 두 줄의'funred' 라인이 더 있었고 어떤 일이 일어날 까봐 두려웠습니다. 시간 소비량은 이제 '0.8 초'입니다. :-) –