2017-12-04 13 views
0

내가 MATLAB에서 발생하는 문제에 대한 몇 가지 조언이 필요합니다. 처음에는 각 격자 점에서 지정된 위치까지 GreatCircle 거리를 계산하고 최소 거리가있는 해당 행/열 인덱스를 반환하는 방법에 대해 생각했습니다. 그러나 이렇게하면, 어떻게 보간을 계산할 수 있을지 확신 할 수 없습니다.추출 데이터는

데이터를 4 열의 벡터 데이터로 재구성하고 가능하면 interp2를 사용하기 위해 meshgrid를 실행했습니다. 그러나이 오류로 끝났습니다.

Requested 109620x109620 (44.8GB) array exceeds maximum array size preference

가장 효율적인 방법은 무엇입니까?

+0

매트릭스의 크기는 어떻게됩니까? 'Latitude'와'Longitude'는 이미 meshgrid가 될까요? – m7913d

답변

0

큰 배열 작업을하고 있습니다. interp2이 처리 할 수없는 경우 대신 하위 배열에서 작업하십시오.

% Create data 
format shortG 
[Latitude,Longitude] = meshgrid(1:12,1:12); 
Altitude = floor(1000+sortrows(rand(12,12))*1000); 
Temperature = 10+20*rand(12,12); 

Lat = 2.1; 
Lon = 11.8; 

% Find closest match point 
[~,i_Lat] = min(abs(Latitude(1,:)-Lat)); 
[~,i_Lon] = min(abs(Longitude(:,1)-Lon)); 

% Select subarrays around this point. 
% Minimum size of these matrices depend on the type of interpolation you perform 
ia1 = max(1,i_Lat-5); 
ia2 = min(size(Latitude,1),i_Lat+5); 
io1 = max(1,i_Lon-5); 
io2 = min(size(Latitude,2),i_Lon+5); 

subLatitude = Latitude(io1:io2,ia1:ia2); 
subLongitude = Longitude(io1:io2,ia1:ia2); 
subAltitude = Altitude(io1:io2,ia1:ia2); 
subTemperature = Temperature(io1:io2,ia1:ia2); 

% Interpolate on these small arrays, and evaluate at target (Lat, Lon) point 
A_out = interp2(subLatitude, subLongitude, subAltitude, Lat, Lon) 
T_out = interp2(subLatitude, subLongitude, subTemperature, Lat, Lon) 
+0

Laure에게 조언을 구해 주셔서 감사합니다. ia 및 io 계산에서 -5/+ 5가 왜 있는지 알 수 있습니까? – Corse

+0

@Corse. 목표 지점을 중심으로 배열의 부분 집합으로 만 보간하려고합니다. + -5는 임의입니다 (직선 보간 + -2도 가능). 나는 – Laure

+0

을 본다. interp2에 대한 스플라인 보간을 사용해야하는 경우 어떤 값을 사용해야합니까? -5/+ 5가 할 것 같네요, 그렇죠? 이것은 기본적으로 보간에 사용할 데이터 포인트를 약간 더줍니다. – Corse